@stacksjs/ts-cloud 0.12.13 → 0.12.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aws/index.js +1 -1
- package/dist/bin/chunk-4w80w3sm.js +1 -0
- package/dist/bin/{chunk-wvhqjr80.js → chunk-5tsxt28g.js} +2 -2
- package/dist/bin/{chunk-7h6h8yxm.js → chunk-77qpn2m8.js} +3 -3
- package/dist/bin/{chunk-13dhcjjb.js → chunk-7xvm2ygt.js} +2 -2
- package/dist/bin/{chunk-6xw0r4gn.js → chunk-8tbj9h2a.js} +35 -35
- package/dist/bin/chunk-971tfc6m.js +1 -0
- package/dist/bin/{chunk-6zk2n3wk.js → chunk-9e22a51n.js} +42 -42
- package/dist/bin/{chunk-z2ez8wn9.js → chunk-9k60q9qz.js} +3 -3
- package/dist/bin/{chunk-5gehfky4.js → chunk-a929za72.js} +2 -2
- package/dist/bin/{chunk-w7k5rvmw.js → chunk-dpw8x3sr.js} +1 -1
- package/dist/bin/{chunk-84tvv3x1.js → chunk-ejqhbj1h.js} +1 -1
- package/dist/bin/{chunk-gj5jkhfr.js → chunk-gd4w6bht.js} +3 -3
- package/dist/bin/chunk-h785hw6a.js +1 -0
- package/dist/bin/chunk-jyggrdh2.js +1 -0
- package/dist/bin/{chunk-1fj5gk6r.js → chunk-kc2e193t.js} +59 -59
- package/dist/bin/{chunk-bnv8yd9w.js → chunk-n7eq4t9a.js} +3 -3
- package/dist/bin/{chunk-d5qhwtkg.js → chunk-n8cwx54p.js} +5 -5
- package/dist/bin/{chunk-d7r6mhyv.js → chunk-ng0949x3.js} +2 -2
- package/dist/bin/{chunk-p9hd27k4.js → chunk-pcyywgx7.js} +1 -1
- package/dist/bin/{chunk-55kmbzr5.js → chunk-pt2bz3kr.js} +1 -1
- package/dist/bin/{chunk-96xtj5j6.js → chunk-q524s7cx.js} +1 -1
- package/dist/bin/{chunk-dh2qmxw9.js → chunk-q9gpw6wv.js} +1 -1
- package/dist/bin/{chunk-x5x9dzk7.js → chunk-r1vtnn8w.js} +2 -2
- package/dist/bin/{chunk-jh1593zx.js → chunk-r1w08y38.js} +1 -1
- package/dist/bin/{chunk-nnkhrm4n.js → chunk-raj6j2j5.js} +2 -2
- package/dist/bin/{chunk-2hpnd4g4.js → chunk-s1j941z1.js} +1 -1
- package/dist/bin/{chunk-ymbwekjm.js → chunk-sdwr2tnp.js} +1 -1
- package/dist/bin/{chunk-9jfjzycs.js → chunk-swete552.js} +10 -10
- package/dist/bin/{chunk-yn34zgr2.js → chunk-v78r5tx0.js} +1 -1
- package/dist/bin/chunk-v7f4c62s.js +1 -0
- package/dist/bin/{chunk-jcyrm5q0.js → chunk-vesvsvdy.js} +1 -1
- package/dist/bin/{chunk-yt8rgkqt.js → chunk-w5hzt11d.js} +2 -2
- package/dist/bin/{chunk-12e9v1dw.js → chunk-x42gb7pq.js} +1 -1
- package/dist/bin/{chunk-0vsxpmfj.js → chunk-yx1qgp1q.js} +2 -2
- package/dist/bin/{chunk-xgepx8yx.js → chunk-zzsdhhmb.js} +1 -1
- package/dist/bin/cli.js +152 -152
- package/dist/bin/dashboard-server.js +1 -1
- package/dist/{chunk-7ww65b66.js → chunk-2knc1zyy.js} +100 -100
- package/dist/{chunk-tnjae324.js → chunk-678rwkz8.js} +75 -75
- package/dist/{chunk-emg3shmb.js → chunk-6t9tjvpy.js} +2 -2
- package/dist/{chunk-g8fpsdyq.js → chunk-6znnde1s.js} +4 -4
- package/dist/{chunk-edqhhcg9.js → chunk-83p688yv.js} +3 -3
- package/dist/{chunk-zmyv76f0.js → chunk-88nxsyry.js} +6 -6
- package/dist/{chunk-sct6mdgc.js → chunk-a6k322xc.js} +25 -25
- package/dist/chunk-atny1wp9.js +1 -0
- package/dist/{chunk-thpce63q.js → chunk-cy6qh4ea.js} +2 -2
- package/dist/{chunk-wpqj98h8.js → chunk-g9mnmddy.js} +2 -2
- package/dist/{chunk-9c29rnk3.js → chunk-gd9g0v9w.js} +8 -8
- package/dist/chunk-hn2v0b0d.js +1 -0
- package/dist/{chunk-e0919h5g.js → chunk-hnkw6pde.js} +2 -2
- package/dist/{chunk-1kp3y2s7.js → chunk-hw3p6pth.js} +1 -1
- package/dist/{chunk-1n3ckctd.js → chunk-jvqcw0b4.js} +48 -48
- package/dist/{chunk-13d54txj.js → chunk-qzwack6w.js} +2 -2
- package/dist/{chunk-e7ds04wb.js → chunk-rbem58rx.js} +1 -1
- package/dist/chunk-v46b25w9.js +1 -0
- package/dist/{chunk-3qp10j0j.js → chunk-w495x89g.js} +3 -3
- package/dist/{chunk-ej4sm2tw.js → chunk-x07tpsv0.js} +5 -5
- package/dist/{chunk-3kapcdpn.js → chunk-yq3pdbz7.js} +1 -1
- package/dist/deploy/index.js +1 -1
- package/dist/dns/index.js +1 -1
- package/dist/drivers/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +47 -47
- package/dist/operations/index.js +1 -1
- package/dist/protection/index.js +1 -1
- package/dist/spend/index.js +1 -1
- package/dist/ui/404.html +1 -1
- package/dist/ui/accept-invitation.html +1 -1
- package/dist/ui/access-denied.html +1 -1
- package/dist/ui/account/automation.html +6 -6
- package/dist/ui/account/security.html +2 -2
- package/dist/ui/applications/compose.html +6 -6
- package/dist/ui/applications/new.html +2 -2
- package/dist/ui/data/backups.html +6 -6
- package/dist/ui/data/services.html +5 -5
- package/dist/ui/data/volumes.html +6 -6
- package/dist/ui/index.html +6 -6
- package/dist/ui/infrastructure/topology.html +6 -6
- package/dist/ui/integrations.html +1 -1
- package/dist/ui/operations/alerts.html +6 -6
- package/dist/ui/operations/configuration.html +6 -6
- package/dist/ui/operations/jobs.html +6 -6
- package/dist/ui/operations/maintenance.html +5 -5
- package/dist/ui/operations/observability.html +5 -5
- package/dist/ui/operations/previews.html +6 -6
- package/dist/ui/operations/queue.html +6 -6
- package/dist/ui/operations/regions.html +5 -5
- package/dist/ui/operations/releases.html +6 -6
- package/dist/ui/operations/spend.html +6 -6
- package/dist/ui/operations/workloads.html +6 -6
- package/dist/ui/security.html +1 -1
- package/dist/ui/server/actions.html +5 -5
- package/dist/ui/server/activity.html +2 -2
- package/dist/ui/server/capacity.html +5 -5
- package/dist/ui/server/database.html +6 -6
- package/dist/ui/server/deployments.html +6 -6
- package/dist/ui/server/diagnostics.html +2 -2
- package/dist/ui/server/firewall.html +6 -6
- package/dist/ui/server/fleet.html +6 -6
- package/dist/ui/server/logs.html +5 -5
- package/dist/ui/server/metrics.html +6 -6
- package/dist/ui/server/security.html +1 -1
- package/dist/ui/server/services.html +1 -1
- package/dist/ui/server/sites.html +6 -6
- package/dist/ui/server/ssh-keys.html +6 -6
- package/dist/ui/server/team.html +6 -6
- package/dist/ui/server/terminal.html +2 -2
- package/dist/ui/serverless/alarms.html +6 -6
- package/dist/ui/serverless/assets.html +2 -2
- package/dist/ui/serverless/cost.html +2 -2
- package/dist/ui/serverless/data.html +5 -5
- package/dist/ui/serverless/deployments.html +1 -1
- package/dist/ui/serverless/firewall.html +2 -2
- package/dist/ui/serverless/functions.html +5 -5
- package/dist/ui/serverless/logs.html +6 -6
- package/dist/ui/serverless/metrics.html +2 -2
- package/dist/ui/serverless/queues.html +6 -6
- package/dist/ui/serverless/secrets.html +6 -6
- package/dist/ui/serverless/traces.html +6 -6
- package/dist/ui/serverless.html +5 -5
- package/package.json +3 -3
- package/dist/bin/chunk-de88yqwy.js +0 -1
- package/dist/bin/chunk-p36ns96s.js +0 -1
- package/dist/bin/chunk-qz3za76g.js +0 -1
- package/dist/bin/chunk-rxwecjgc.js +0 -1
- package/dist/bin/chunk-xaafj6kf.js +0 -1
- package/dist/chunk-7by4rm7y.js +0 -1
- package/dist/chunk-n688m5fp.js +0 -1
- package/dist/chunk-wrnhbb13.js +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{n}from"./chunk-30h9rgfn.js";import{Nt,a}from"./chunk-3kapcdpn.js";import{Je}from"./chunk-thpce63q.js";import{_e}from"./chunk-e0919h5g.js";class Jt{region;client;constructor(e="us-east-1",t=new n){this.region=e;this.client=t}request(e,t){return this.client.request({service:"backup",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`CryoControllerFrontendService.${e}`},body:JSON.stringify(t)})}startBackupJob(e){return this.request("StartBackupJob",e)}describeBackupJob(e){return this.request("DescribeBackupJob",{BackupJobId:e})}startRestoreJob(e){return this.request("StartRestoreJob",e)}describeRestoreJob(e){return this.request("DescribeRestoreJob",{RestoreJobId:e})}deleteRecoveryPoint(e,t){return this.request("DeleteRecoveryPoint",{BackupVaultName:e,RecoveryPointArn:t})}}function ne(e,t){if(!t)return e;return e.startsWith(t)?e.slice(t.length):e}function ji(e,t,r){let i=ne(e,t);return`${r??""}${i}`}function zi(e,t,r){if(r&&r.some((i)=>e.startsWith(i)))return!1;if(t&&t.length>0)return t.some((i)=>e.startsWith(i));return!0}async function ie(e,t,r){let i=0,s=[],o=Math.max(1,Math.min(t,e.length||1));for(let c=0;c<o;c++)s.push((async()=>{while(!0){let u=i++;if(u>=e.length)return;await r(e[u],u)}})());await Promise.all(s)}function v(e){if(e.client)return e.client;return Ki({provider:e.provider,region:e.region,endpoint:e.endpoint,forcePathStyle:e.forcePathStyle,credentials:e.credentials})}async function Hl(e){let t=e.concurrency??8,r=v(e.from),i=v(e.to),s=await r.listAllObjects({bucket:e.from.bucket,prefix:e.from.prefix}),o={copied:0,skipped:0,excluded:0,bytesCopied:0,errors:[],excludedKeys:[],deleted:[]},c=[];for(let d of s){if(!zi(d.Key,e.include,e.exclude)){o.excluded++,o.excludedKeys.push(d.Key);continue}c.push({source:d,destKey:ji(d.Key,e.from.prefix,e.to.prefix)})}if(e.dryRun){o.plan=c.map(({source:p,destKey:h})=>({key:p.Key,destKey:h,size:p.Size}));let d=s.length,l=0;for(let p of s){l++;let h=!zi(p.Key,e.include,e.exclude);e.onProgress?.({key:p.Key,destKey:h?"":ji(p.Key,e.from.prefix,e.to.prefix),size:p.Size,action:h?"excluded":"planned",index:l,total:d})}return o}let u=c.length,g=0;await ie(c,t,async({source:d,destKey:l})=>{let p=++g;try{if(!e.force){let f=await i.headObject(e.to.bucket,l);if(f&&f.ContentLength===d.Size){o.skipped++,e.onProgress?.({key:d.Key,destKey:l,size:d.Size,action:"skipped",index:p,total:u});return}}let{body:h,contentType:y}=await r.getObjectBytes(e.from.bucket,d.Key);await i.putObject({bucket:e.to.bucket,key:l,body:h,contentType:y}),o.copied++,o.bytesCopied+=h.byteLength,e.onProgress?.({key:d.Key,destKey:l,size:d.Size,action:"copied",index:p,total:u})}catch(h){o.errors.push({key:d.Key,message:h?.message??String(h)}),e.onProgress?.({key:d.Key,destKey:l,size:d.Size,action:"error",index:p,total:u})}});let m=new Set(c.map((d)=>d.destKey));if(e.deleteExtraneous){let l=(await i.listAllObjects({bucket:e.to.bucket,prefix:e.to.prefix})).filter((p)=>!m.has(p.Key)).map((p)=>p.Key);for(let p of l)try{await i.deleteObject(e.to.bucket,p),o.deleted.push(p)}catch(h){o.errors.push({key:p,message:`delete failed: ${h?.message??String(h)}`})}}if(e.verify){let d=await i.listAllObjects({bucket:e.to.bucket,prefix:e.to.prefix}),l=new Map(d.map((f)=>[f.Key,f.Size])),p=[],h=[],y=0;for(let{source:f,destKey:S}of c){if(!l.has(S)){p.push(S);continue}let b=l.get(S);if(b!==f.Size){h.push({key:S,expected:f.Size,actual:b});continue}y++}o.verification={ok:p.length===0&&h.length===0,matched:y,missing:p,sizeMismatches:h}}return o}var se={aws:"us-east-1",backblaze:"us-west-004",hetzner:"fsn1"};function Aa(e,t){switch(e){case"backblaze":return`s3.${t}.backblazeb2.com`;case"hetzner":return`${t}.your-objectstorage.com`;case"aws":default:return}}function T(...e){for(let t of e){let r=process.env[t];if(r)return r}return}function oe(e,t){if(t?.accessKeyId&&t.secretAccessKey)return t;let r,i;if(e==="backblaze")r=T("B2_APPLICATION_KEY_ID","B2_KEY_ID","S3_ACCESS_KEY_ID","AWS_ACCESS_KEY_ID"),i=T("B2_APPLICATION_KEY","B2_SECRET_KEY","S3_SECRET_ACCESS_KEY","AWS_SECRET_ACCESS_KEY");else if(e==="hetzner")r=T("HETZNER_S3_ACCESS_KEY","HETZNER_ACCESS_KEY","S3_ACCESS_KEY_ID","AWS_ACCESS_KEY_ID"),i=T("HETZNER_S3_SECRET_KEY","HETZNER_SECRET_KEY","S3_SECRET_ACCESS_KEY","AWS_SECRET_ACCESS_KEY");else r=T("S3_ACCESS_KEY_ID"),i=T("S3_SECRET_ACCESS_KEY");if(r&&i)return{accessKeyId:r,secretAccessKey:i,sessionToken:T("AWS_SESSION_TOKEN")};return}function ya(e={}){let t=e.provider||T("OBJECT_STORAGE_PROVIDER","STORAGE_PROVIDER")||"aws",r=e.region||(t==="backblaze"?T("B2_REGION"):void 0)||(t==="hetzner"?T("HETZNER_S3_REGION","HETZNER_REGION"):void 0)||T("S3_REGION","AWS_REGION","AWS_DEFAULT_REGION")||se[t],i=e.endpoint||T("S3_ENDPOINT")||Aa(t,r),s=e.forcePathStyle??T("S3_FORCE_PATH_STYLE")==="true",o=oe(t,e.credentials),c=(u)=>{let g=i||`s3.${r}.amazonaws.com`;return s?`https://${g}/${u}`:`https://${u}.${g}`};return{provider:t,region:r,endpoint:i,forcePathStyle:s,credentials:o,profile:e.profile,publicBaseUrl:c}}function Ki(e={}){let t=ya(e),r={endpoint:t.endpoint,forcePathStyle:t.forcePathStyle,credentials:t.credentials};return new a(t.region,t.profile,r)}import{createHash as ae}from"node:crypto";import{existsSync as ce,mkdirSync as ge,readdirSync as Ve,readFileSync as de,rmSync as Ge,writeFileSync as me}from"node:fs";import{homedir as pe}from"node:os";import{join as x}from"node:path";var w=1,k=3600000,he=24*k,ye=k,fe=30*he;function Se(){let e=process.env.XDG_CACHE_HOME;return x(e&&e.trim()?e:x(pe(),".cache"),"ts-cloud","cost-explorer")}function L(e){return x(Se(),e??"__default__")}function M(e){let t={s:e.start,e:e.end,g:e.granularity,m:[...e.metrics].sort(),gb:[...e.groupBy].map((r)=>`${r.Type}:${r.Key}`).sort(),f:e.filter??null};return ae("sha256").update(JSON.stringify(t)).digest("hex").slice(0,24)}function be(e,t){let r=Date.parse(`${t}T00:00:00Z`);if(Number.isNaN(r))return!1;let i=new Date,s=Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),1);return r<=s}function Ce(e){return be(e.start,e.end)?fe:ye}function F(e,t){let r=x(L(e),`${M(t)}.json`);if(!ce(r))return null;let i;try{i=JSON.parse(de(r,"utf-8"))}catch{return null}if(i.schema!==w)return null;let s=Date.now()-i.savedAt;if(s<0||s>Ce(t))return null;return{response:i.response,ageSeconds:Math.floor(s/1000)}}function U(e,t,r){let i=L(e);ge(i,{recursive:!0});let s={schema:w,savedAt:Date.now(),key:t,response:r};me(x(i,`${M(t)}.json`),JSON.stringify(s))}class Wi{client;profile;useCache;lastCacheAgeSeconds=null;constructor(e,t){this.profile=e,this.useCache=t?.useCache??!0,this.client=new n(Nt(e))}async getCostByService(e){return(await this.getCostByDimension({...e,dimension:"SERVICE"})).map((r)=>({service:r.key,amount:r.amount,unit:r.unit}))}async getCostByDimension(e){let{start:t,end:r,dimension:i,granularity:s="MONTHLY",filter:o}=e,c=["UnblendedCost"],u=[{Type:"DIMENSION",Key:i}],g={start:t,end:r,granularity:s,metrics:c,groupBy:u,filter:o};if(this.useCache){let p=F(this.profile,g);if(p)return this.lastCacheAgeSeconds=p.ageSeconds,p.response}this.lastCacheAgeSeconds=null;let m=new Map,d;do{let p={TimePeriod:{Start:t,End:r},Granularity:s,Metrics:c,GroupBy:u};if(o)p.Filter=o;if(d)p.NextPageToken=d;let h=await this.client.request({service:"ce",region:"us-east-1",method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"AWSInsightsIndexService.GetCostAndUsage"},body:JSON.stringify(p)});for(let y of h?.ResultsByTime??[])for(let f of y?.Groups??[]){let S=f.Keys?.[0]??"Unknown",b=Number.parseFloat(f.Metrics?.UnblendedCost?.Amount??"0"),I=f.Metrics?.UnblendedCost?.Unit??"USD",A=m.get(S);m.set(S,{key:S,amount:(A?.amount??0)+b,unit:I})}d=h?.NextPageToken||void 0}while(d);let l=[...m.values()].filter((p)=>p.amount>0).sort((p,h)=>h.amount-p.amount);if(this.useCache)U(this.profile,g,l);return l}async getDailyTotals(e){return((await this.client.request({service:"ce",region:"us-east-1",method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"AWSInsightsIndexService.GetCostAndUsage"},body:JSON.stringify({TimePeriod:{Start:e.start,End:e.end},Granularity:"DAILY",Metrics:["UnblendedCost"]})}))?.ResultsByTime??[]).map((i)=>Number.parseFloat(i.Total?.UnblendedCost?.Amount??"0"))}}class Ia{client;region="us-east-1";constructor(){this.client=new n}async getDomainDetail(e){let t=JSON.stringify({DomainName:e.DomainName}),r=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.GetDomainDetail"},body:t});return this.parseDomainDetail(r)}async updateDomainNameservers(e){let t=JSON.stringify({DomainName:e.DomainName,Nameservers:e.Nameservers.map((i)=>({Name:i.Name,...i.GlueIps&&{GlueIps:i.GlueIps}}))});return{OperationId:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.UpdateDomainNameservers"},body:t})).OperationId||""}}async listDomains(e){let t={};if(e?.Marker)t.Marker=e.Marker;if(e?.MaxItems)t.MaxItems=e.MaxItems;if(e?.SortCondition)t.SortCondition=e.SortCondition;let r=JSON.stringify(t),i=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.ListDomains"},body:r});return{Domains:i.Domains||[],NextPageMarker:i.NextPageMarker}}async checkDomainAvailability(e){let t=JSON.stringify({DomainName:e.DomainName});return{Availability:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.CheckDomainAvailability"},body:t})).Availability||"DONT_KNOW"}}async getDomainPrice(e){let t=e.DomainName.split(".").slice(1).join("."),r=JSON.stringify({Tld:t}),s=(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.ListPrices"},body:r})).Prices?.[0]||{};return{RegistrationPrice:s.RegistrationPrice?{Price:s.RegistrationPrice.Price,Currency:s.RegistrationPrice.Currency}:void 0,RenewalPrice:s.RenewalPrice?{Price:s.RenewalPrice.Price,Currency:s.RenewalPrice.Currency}:void 0,TransferPrice:s.TransferPrice?{Price:s.TransferPrice.Price,Currency:s.TransferPrice.Currency}:void 0}}async registerDomain(e){let t=JSON.stringify({DomainName:e.DomainName,DurationInYears:e.DurationInYears,AutoRenew:e.AutoRenew??!0,AdminContact:e.AdminContact,RegistrantContact:e.RegistrantContact,TechContact:e.TechContact,PrivacyProtectAdminContact:e.PrivacyProtectAdminContact??!0,PrivacyProtectRegistrantContact:e.PrivacyProtectRegistrantContact??!0,PrivacyProtectTechContact:e.PrivacyProtectTechContact??!0});return{OperationId:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.RegisterDomain"},body:t})).OperationId||""}}async getOperationDetail(e){let t=JSON.stringify({OperationId:e.OperationId}),r=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.GetOperationDetail"},body:t});return{OperationId:r.OperationId||"",Status:r.Status||"SUBMITTED",Message:r.Message,DomainName:r.DomainName,Type:r.Type,SubmittedDate:r.SubmittedDate}}parseDomainDetail(e){return{DomainName:e.DomainName||"",Nameservers:e.Nameservers?.map((t)=>({Name:t.Name,GlueIps:t.GlueIps})),AutoRenew:e.AutoRenew,AdminContact:e.AdminContact,RegistrantContact:e.RegistrantContact,TechContact:e.TechContact,AdminPrivacy:e.AdminPrivacy,RegistrantPrivacy:e.RegistrantPrivacy,TechPrivacy:e.TechPrivacy,RegistrarName:e.RegistrarName,WhoIsServer:e.WhoIsServer,RegistrarUrl:e.RegistrarUrl,AbuseContactEmail:e.AbuseContactEmail,AbuseContactPhone:e.AbuseContactPhone,RegistryDomainId:e.RegistryDomainId,CreationDate:e.CreationDate,UpdatedDate:e.UpdatedDate,ExpirationDate:e.ExpirationDate,Reseller:e.Reseller,DnsSec:e.DnsSec,StatusList:e.StatusList}}}class ze{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async describeServices(e){let t={cluster:e.cluster,services:e.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(t)})}async listServices(e,t={}){let r={cluster:e,...t};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(e,t,r={}){let i={cluster:e,...r};if(t)i.serviceName=t;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(i)})}async describeTasks(e,t){let r={cluster:e,tasks:t};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(e){let t={cluster:e.cluster,service:e.service};if(e.forceNewDeployment!==void 0)t.forceNewDeployment=e.forceNewDeployment;if(e.desiredCount!==void 0)t.desiredCount=e.desiredCount;if(e.taskDefinition)t.taskDefinition=e.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(t)})}async createService(e){let t={cluster:e.cluster,serviceName:e.serviceName,taskDefinition:e.taskDefinition,desiredCount:e.desiredCount};if(e.launchType)t.launchType=e.launchType;if(e.networkConfiguration)t.networkConfiguration=e.networkConfiguration;if(e.loadBalancers)t.loadBalancers=e.loadBalancers;if(e.healthCheckGracePeriodSeconds!==void 0)t.healthCheckGracePeriodSeconds=e.healthCheckGracePeriodSeconds;if(e.deploymentConfiguration)t.deploymentConfiguration=e.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(t)})}async deleteService(e){let t={cluster:e.cluster,service:e.service};if(e.force!==void 0)t.force=e.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(t)})}async listClusters(e={}){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(e)})}async describeClusters(e){let t={clusters:e,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(t)})}async stopTask(e){let t={cluster:e.cluster,task:e.task};if(e.reason)t.reason=e.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(t)})}async runTask(e){let t={cluster:e.cluster,taskDefinition:e.taskDefinition};if(e.count!==void 0)t.count=e.count;if(e.launchType)t.launchType=e.launchType;if(e.networkConfiguration)t.networkConfiguration=e.networkConfiguration;if(e.overrides)t.overrides=e.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(t)})}async registerTaskDefinition(e){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(e)})}async deregisterTaskDefinition(e){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:e})})}async describeTaskDefinition(e){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:e,include:["TAGS"]})})}async listTaskDefinitionFamilies(e){let t={};if(e?.familyPrefix)t.familyPrefix=e.familyPrefix;if(e?.status)t.status=e.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(t)})}async waitForServiceStable(e,t,r=40,i=15000){for(let s=0;s<r;s++){let c=(await this.describeServices({cluster:e,services:[t]})).services?.[0];if(c){let u=c.deployments?.find((g)=>g.status==="PRIMARY");if(u&&u.runningCount===u.desiredCount&&c.deployments?.length===1)return!0}await new Promise((u)=>setTimeout(u,i))}return!1}async forceNewDeployment(e,t){return this.updateService({cluster:e,service:t,forceNewDeployment:!0})}async scaleService(e,t,r){return this.updateService({cluster:e,service:t,desiredCount:r})}}class le{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async getCallerIdentity(){let e=await this.client.request({service:"sts",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"Action=GetCallerIdentity&Version=2011-06-15"});if(typeof e==="string"){let r=e.match(/<Account>(\d+)<\/Account>/),i=e.match(/<UserId>([^<]+)<\/UserId>/),s=e.match(/<Arn>([^<]+)<\/Arn>/);return{Account:r?.[1],UserId:i?.[1],Arn:s?.[1]}}let t=e?.GetCallerIdentityResponse?.GetCallerIdentityResult||e?.GetCallerIdentityResult;if(t)return{Account:String(t.Account),UserId:t.UserId,Arn:t.Arn};if(e?.Account)return{Account:String(e.Account),UserId:e.UserId,Arn:e.Arn};return{Account:void 0,UserId:void 0,Arn:void 0}}}class V{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async createSecret(e){let t={Name:e.Name};if(e.Description)t.Description=e.Description;if(e.KmsKeyId)t.KmsKeyId=e.KmsKeyId;if(e.SecretBinary)t.SecretBinary=e.SecretBinary;if(e.SecretString)t.SecretString=e.SecretString;if(e.Tags&&e.Tags.length>0)t.Tags=e.Tags;if(e.AddReplicaRegions&&e.AddReplicaRegions.length>0)t.AddReplicaRegions=e.AddReplicaRegions;if(e.ForceOverwriteReplicaSecret!==void 0)t.ForceOverwriteReplicaSecret=e.ForceOverwriteReplicaSecret;t.ClientRequestToken=e.ClientRequestToken||crypto.randomUUID();let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.CreateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId,ReplicationStatus:r.ReplicationStatus}}async updateSecret(e){let t={SecretId:e.SecretId};if(e.Description)t.Description=e.Description;if(e.KmsKeyId)t.KmsKeyId=e.KmsKeyId;if(e.SecretBinary)t.SecretBinary=e.SecretBinary;if(e.SecretString)t.SecretString=e.SecretString;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.UpdateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId}}async putSecretValue(e){let t={SecretId:e.SecretId};if(e.SecretBinary)t.SecretBinary=e.SecretBinary;if(e.SecretString)t.SecretString=e.SecretString;if(e.VersionStages&&e.VersionStages.length>0)t.VersionStages=e.VersionStages;if(e.ClientRequestToken)t.ClientRequestToken=e.ClientRequestToken;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.PutSecretValue","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId,VersionStages:r.VersionStages}}async getSecretValue(e){let t={SecretId:e.SecretId};if(e.VersionId)t.VersionId=e.VersionId;if(e.VersionStage)t.VersionStage=e.VersionStage;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.GetSecretValue","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId,SecretBinary:r.SecretBinary,SecretString:r.SecretString,VersionStages:r.VersionStages,CreatedDate:r.CreatedDate}}async describeSecret(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DescribeSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return this.parseSecret(r)}async listSecrets(e){let t={};if(e?.MaxResults)t.MaxResults=e.MaxResults;if(e?.NextToken)t.NextToken=e.NextToken;if(e?.Filters&&e.Filters.length>0)t.Filters=e.Filters;if(e?.SortOrder)t.SortOrder=e.SortOrder;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.ListSecrets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{SecretList:r.SecretList?.map((i)=>this.parseSecret(i)),NextToken:r.NextToken}}async deleteSecret(e){let t={SecretId:e.SecretId};if(e.RecoveryWindowInDays!==void 0)t.RecoveryWindowInDays=e.RecoveryWindowInDays;if(e.ForceDeleteWithoutRecovery!==void 0)t.ForceDeleteWithoutRecovery=e.ForceDeleteWithoutRecovery;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DeleteSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,DeletionDate:r.DeletionDate}}async restoreSecret(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.RestoreSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async rotateSecret(e){let t={SecretId:e.SecretId};if(e.ClientRequestToken)t.ClientRequestToken=e.ClientRequestToken;if(e.RotationLambdaARN)t.RotationLambdaARN=e.RotationLambdaARN;if(e.RotationRules)t.RotationRules=e.RotationRules;if(e.RotateImmediately!==void 0)t.RotateImmediately=e.RotateImmediately;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.RotateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId}}async cancelRotateSecret(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.CancelRotateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async getResourcePolicy(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.GetResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,ResourcePolicy:r.ResourcePolicy}}async putResourcePolicy(e){let t={SecretId:e.SecretId,ResourcePolicy:e.ResourcePolicy};if(e.BlockPublicPolicy!==void 0)t.BlockPublicPolicy=e.BlockPublicPolicy;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.PutResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async deleteResourcePolicy(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DeleteResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async tagResource(e){let t={SecretId:e.SecretId,Tags:e.Tags};await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.TagResource","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async untagResource(e){let t={SecretId:e.SecretId,TagKeys:e.TagKeys};await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.UntagResource","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async setString(e,t,r){try{let i=await this.putSecretValue({SecretId:e,SecretString:t});return{ARN:i.ARN,VersionId:i.VersionId}}catch(i){if(i.code==="ResourceNotFoundException"){let s=await this.createSecret({Name:e,SecretString:t,Description:r?.description,KmsKeyId:r?.kmsKeyId,Tags:r?.tags});return{ARN:s.ARN,VersionId:s.VersionId}}throw i}}async setJson(e,t,r){return this.setString(e,JSON.stringify(t),r)}async getString(e){return(await this.getSecretValue({SecretId:e})).SecretString}async getJson(e){let t=await this.getString(e);if(t)return JSON.parse(t);return}async listAll(){let e=[],t;do{let r=await this.listSecrets({NextToken:t});if(r.SecretList)e.push(...r.SecretList);t=r.NextToken}while(t);return e}parseSecret(e){return{ARN:e.ARN,Name:e.Name,Description:e.Description,KmsKeyId:e.KmsKeyId,RotationEnabled:e.RotationEnabled,RotationLambdaARN:e.RotationLambdaARN,RotationRules:e.RotationRules,LastRotatedDate:e.LastRotatedDate,LastChangedDate:e.LastChangedDate,LastAccessedDate:e.LastAccessedDate,DeletedDate:e.DeletedDate,NextRotationDate:e.NextRotationDate,Tags:e.Tags,SecretVersionsToStages:e.SecretVersionsToStages,CreatedDate:e.CreatedDate,PrimaryRegion:e.PrimaryRegion}}}class Ke{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}buildFormBody(e){return Object.entries(e).filter(([,r])=>r!==void 0).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(i)}`).join("&")}async createTopic(e){let t={Action:"CreateTopic",Version:"2010-03-31",Name:e.Name};if(e.DisplayName)t["Attributes.entry.1.key"]="DisplayName",t["Attributes.entry.1.value"]=e.DisplayName;if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});if(e.Attributes){let i=e.DisplayName?2:1;Object.entries(e.Attributes).forEach(([s,o])=>{t[`Attributes.entry.${i}.key`]=s,t[`Attributes.entry.${i}.value`]=o,i++})}let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)});return{TopicArn:r?.CreateTopicResponse?.CreateTopicResult?.TopicArn||r?.TopicArn}}async deleteTopic(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"DeleteTopic",Version:"2010-03-31",TopicArn:e})})}async listTopics(e){let t={Action:"ListTopics",Version:"2010-03-31"};if(e)t.NextToken=e;let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)}),i=r?.ListTopicsResponse?.ListTopicsResult||r?.ListTopicsResult,s=i?.Topics?.member;return{Topics:Array.isArray(s)?s:s?[s]:[],NextToken:i?.NextToken}}async getTopicAttributes(e){let r=(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetTopicAttributes",Version:"2010-03-31",TopicArn:e})}))?.GetTopicAttributesResponse?.GetTopicAttributesResult?.Attributes?.entry,i={TopicArn:e};if(Array.isArray(r))r.forEach((s)=>{i[s.key]=s.value});return i}async setTopicAttributes(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"SetTopicAttributes",Version:"2010-03-31",TopicArn:e.TopicArn,AttributeName:e.AttributeName,AttributeValue:e.AttributeValue})})}async subscribe(e){let t={Action:"Subscribe",Version:"2010-03-31",TopicArn:e.TopicArn,Protocol:e.Protocol,Endpoint:e.Endpoint};if(e.ReturnSubscriptionArn)t.ReturnSubscriptionArn="true";if(e.Attributes){let i=1;Object.entries(e.Attributes).forEach(([s,o])=>{t[`Attributes.entry.${i}.key`]=s,t[`Attributes.entry.${i}.value`]=o,i++})}let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)});return{SubscriptionArn:r?.SubscribeResponse?.SubscribeResult?.SubscriptionArn||r?.SubscriptionArn}}async unsubscribe(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"Unsubscribe",Version:"2010-03-31",SubscriptionArn:e})})}async listSubscriptionsByTopic(e,t){let r={Action:"ListSubscriptionsByTopic",Version:"2010-03-31",TopicArn:e};if(t)r.NextToken=t;let i=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(r)}),s=i?.ListSubscriptionsByTopicResponse?.ListSubscriptionsByTopicResult?.Subscriptions?.member;return{Subscriptions:Array.isArray(s)?s:s?[s]:[],NextToken:i?.ListSubscriptionsByTopicResponse?.ListSubscriptionsByTopicResult?.NextToken}}async publish(e){let t={Action:"Publish",Version:"2010-03-31",Message:e.Message};if(e.TopicArn)t.TopicArn=e.TopicArn;if(e.TargetArn)t.TargetArn=e.TargetArn;if(e.PhoneNumber)t.PhoneNumber=e.PhoneNumber;if(e.Subject)t.Subject=e.Subject;if(e.MessageStructure)t.MessageStructure=e.MessageStructure;if(e.MessageAttributes){let i=1;Object.entries(e.MessageAttributes).forEach(([s,o])=>{if(t[`MessageAttributes.entry.${i}.Name`]=s,t[`MessageAttributes.entry.${i}.Value.DataType`]=o.DataType,o.StringValue)t[`MessageAttributes.entry.${i}.Value.StringValue`]=o.StringValue;if(o.BinaryValue)t[`MessageAttributes.entry.${i}.Value.BinaryValue`]=o.BinaryValue;i++})}let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)});return{MessageId:r?.PublishResponse?.PublishResult?.MessageId||r?.MessageId}}async publishSMS(e,t,r){let i={};if(r)i["AWS.SNS.SMS.SenderID"]={DataType:"String",StringValue:r};return this.publish({PhoneNumber:e,Message:t,MessageAttributes:Object.keys(i).length>0?i:void 0})}async subscribeEmail(e,t){return this.subscribe({TopicArn:e,Protocol:"email",Endpoint:t})}async subscribeLambda(e,t){return this.subscribe({TopicArn:e,Protocol:"lambda",Endpoint:t})}async subscribeSqs(e,t,r){let i={};if(r)i.RawMessageDelivery="true";return this.subscribe({TopicArn:e,Protocol:"sqs",Endpoint:t,Attributes:Object.keys(i).length>0?i:void 0})}async subscribeHttp(e,t,r){let i=t.startsWith("https")?"https":"http",s={};if(r)s.RawMessageDelivery="true";return this.subscribe({TopicArn:e,Protocol:i,Endpoint:t,Attributes:Object.keys(s).length>0?s:void 0})}async subscribeSms(e,t){return this.subscribe({TopicArn:e,Protocol:"sms",Endpoint:t})}async topicExists(e){try{return await this.getTopicAttributes(e),!0}catch(t){if(t.code==="NotFound"||t.statusCode===404)return!1;throw t}}async getSMSAttributes(){let t=(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetSMSAttributes",Version:"2010-03-31"})}))?.GetSMSAttributesResponse?.GetSMSAttributesResult?.attributes?.entry,r={};if(Array.isArray(t))t.forEach((i)=>{r[i.key]=i.value});else if(t)r[t.key]=t.value;return r}async setSMSAttributes(e){let t={Action:"SetSMSAttributes",Version:"2010-03-31"},r=1;Object.entries(e).forEach(([i,s])=>{if(s!==void 0)t[`attributes.entry.${r}.key`]=i,t[`attributes.entry.${r}.value`]=s,r++}),await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)})}async checkIfPhoneNumberIsOptedOut(e){return(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"CheckIfPhoneNumberIsOptedOut",Version:"2010-03-31",phoneNumber:e})}))?.CheckIfPhoneNumberIsOptedOutResponse?.CheckIfPhoneNumberIsOptedOutResult?.isOptedOut==="true"}async listPhoneNumbersOptedOut(e){let t={Action:"ListPhoneNumbersOptedOut",Version:"2010-03-31"};if(e)t.nextToken=e;let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)}),i=r?.ListPhoneNumbersOptedOutResponse?.ListPhoneNumbersOptedOutResult?.phoneNumbers?.member;return{phoneNumbers:Array.isArray(i)?i:i?[i]:[],nextToken:r?.ListPhoneNumbersOptedOutResponse?.ListPhoneNumbersOptedOutResult?.nextToken}}async optInPhoneNumber(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"OptInPhoneNumber",Version:"2010-03-31",phoneNumber:e})})}async listSMSSandboxPhoneNumbers(e){let t={Action:"ListSMSSandboxPhoneNumbers",Version:"2010-03-31"};if(e)t.NextToken=e;let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)}),i=r?.ListSMSSandboxPhoneNumbersResponse?.ListSMSSandboxPhoneNumbersResult?.PhoneNumbers?.member;return{PhoneNumbers:Array.isArray(i)?i:i?[i]:[],NextToken:r?.ListSMSSandboxPhoneNumbersResponse?.ListSMSSandboxPhoneNumbersResult?.NextToken}}async createSMSSandboxPhoneNumber(e,t){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"CreateSMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:e,LanguageCode:t||"en-US"})})}async verifySMSSandboxPhoneNumber(e,t){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"VerifySMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:e,OneTimePassword:t})})}async deleteSMSSandboxPhoneNumber(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"DeleteSMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:e})})}async getSMSSandboxAccountStatus(){return{IsInSandbox:(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetSMSSandboxAccountStatus",Version:"2010-03-31"})}))?.GetSMSSandboxAccountStatusResponse?.GetSMSSandboxAccountStatusResult?.IsInSandbox==="true"}}}class te{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async createQueue(e){let r={Action:"CreateQueue",QueueName:e.fifo&&!e.queueName.endsWith(".fifo")?`${e.queueName}.fifo`:e.queueName,Version:"2012-11-05"},i=1;if(e.visibilityTimeout!==void 0)r[`Attribute.${i}.Name`]="VisibilityTimeout",r[`Attribute.${i}.Value`]=e.visibilityTimeout.toString(),i++;if(e.messageRetentionPeriod!==void 0)r[`Attribute.${i}.Name`]="MessageRetentionPeriod",r[`Attribute.${i}.Value`]=e.messageRetentionPeriod.toString(),i++;if(e.delaySeconds!==void 0)r[`Attribute.${i}.Name`]="DelaySeconds",r[`Attribute.${i}.Value`]=e.delaySeconds.toString(),i++;if(e.maxMessageSize!==void 0)r[`Attribute.${i}.Name`]="MaximumMessageSize",r[`Attribute.${i}.Value`]=e.maxMessageSize.toString(),i++;if(e.receiveMessageWaitTime!==void 0)r[`Attribute.${i}.Name`]="ReceiveMessageWaitTimeSeconds",r[`Attribute.${i}.Value`]=e.receiveMessageWaitTime.toString(),i++;if(e.fifo){if(r[`Attribute.${i}.Name`]="FifoQueue",r[`Attribute.${i}.Value`]="true",i++,e.contentBasedDeduplication)r[`Attribute.${i}.Name`]="ContentBasedDeduplication",r[`Attribute.${i}.Value`]="true",i++}if(e.deadLetterTargetArn&&e.maxReceiveCount)r[`Attribute.${i}.Name`]="RedrivePolicy",r[`Attribute.${i}.Value`]=JSON.stringify({deadLetterTargetArn:e.deadLetterTargetArn,maxReceiveCount:e.maxReceiveCount}),i++;if(e.tags&&Object.keys(e.tags).length>0){let o=1;for(let[c,u]of Object.entries(e.tags))r[`Tag.${o}.Key`]=c,r[`Tag.${o}.Value`]=u,o++}let s=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()});return{QueueUrl:s.QueueUrl||s.CreateQueueResult?.QueueUrl}}async listQueues(e){let t={Action:"ListQueues",Version:"2012-11-05"};if(e)t.QueueNamePrefix=e;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()}),i=[];if(r.QueueUrl)i.push(r.QueueUrl);else if(r.ListQueuesResult?.QueueUrl)if(Array.isArray(r.ListQueuesResult.QueueUrl))i.push(...r.ListQueuesResult.QueueUrl);else i.push(r.ListQueuesResult.QueueUrl);return{QueueUrls:i}}async getQueueAttributes(e){let t={Action:"GetQueueAttributes",QueueUrl:e,Version:"2012-11-05","AttributeName.1":"All"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{Attributes:r.Attributes||r.GetQueueAttributesResult?.Attributes||{}}}async getQueueUrl(e){let t={Action:"GetQueueUrl",QueueName:e,Version:"2012-11-05"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{QueueUrl:r.QueueUrl||r.GetQueueUrlResult?.QueueUrl}}async deleteQueue(e){let t={Action:"DeleteQueue",QueueUrl:e,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()})}async purgeQueue(e){let t={Action:"PurgeQueue",QueueUrl:e,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()})}async sendMessage(e){let t={Action:"SendMessage",QueueUrl:e.queueUrl,MessageBody:e.messageBody,Version:"2012-11-05"};if(e.delaySeconds!==void 0)t.DelaySeconds=e.delaySeconds;if(e.messageGroupId)t.MessageGroupId=e.messageGroupId;if(e.messageDeduplicationId)t.MessageDeduplicationId=e.messageDeduplicationId;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{MessageId:r.MessageId||r.SendMessageResult?.MessageId}}async receiveMessages(e){let t={Action:"ReceiveMessage",QueueUrl:e.queueUrl,Version:"2012-11-05"};if(e.maxMessages!==void 0)t.MaxNumberOfMessages=e.maxMessages;if(e.visibilityTimeout!==void 0)t.VisibilityTimeout=e.visibilityTimeout;if(e.waitTimeSeconds!==void 0)t.WaitTimeSeconds=e.waitTimeSeconds;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()}),i=[],s=r.Message||r.ReceiveMessageResult?.Message;if(s)if(Array.isArray(s))i.push(...s.map((o)=>({MessageId:o.MessageId,ReceiptHandle:o.ReceiptHandle,Body:o.Body})));else i.push({MessageId:s.MessageId,ReceiptHandle:s.ReceiptHandle,Body:s.Body});return{Messages:i}}async deleteMessage(e,t){let r={Action:"DeleteMessage",QueueUrl:e,ReceiptHandle:t,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}}import{deflateRawSync as Te}from"zlib";function B(e,t){let r=typeof t==="string"?Buffer.from(t,"utf-8"):t,i=Te(r),s=Ie(r),o=new Date,c=(o.getHours()<<11|o.getMinutes()<<5|o.getSeconds()>>1)&65535,u=(o.getFullYear()-1980<<9|o.getMonth()+1<<5|o.getDate())&65535,g=Buffer.from(e,"utf-8"),m=Buffer.alloc(30+g.length);m.writeUInt32LE(67324752,0),m.writeUInt16LE(20,4),m.writeUInt16LE(0,6),m.writeUInt16LE(8,8),m.writeUInt16LE(c,10),m.writeUInt16LE(u,12),m.writeUInt32LE(s,14),m.writeUInt32LE(i.length,18),m.writeUInt32LE(r.length,22),m.writeUInt16LE(g.length,26),m.writeUInt16LE(0,28),g.copy(m,30);let d=Buffer.alloc(46+g.length);d.writeUInt32LE(33639248,0),d.writeUInt16LE(20,4),d.writeUInt16LE(20,6),d.writeUInt16LE(0,8),d.writeUInt16LE(8,10),d.writeUInt16LE(c,12),d.writeUInt16LE(u,14),d.writeUInt32LE(s,16),d.writeUInt32LE(i.length,20),d.writeUInt32LE(r.length,24),d.writeUInt16LE(g.length,28),d.writeUInt16LE(0,30),d.writeUInt16LE(0,32),d.writeUInt16LE(0,34),d.writeUInt16LE(0,36),d.writeUInt32LE(0,38),d.writeUInt32LE(0,42),g.copy(d,46);let l=m.length+i.length,p=d.length,h=Buffer.alloc(22);return h.writeUInt32LE(101010256,0),h.writeUInt16LE(0,4),h.writeUInt16LE(0,6),h.writeUInt16LE(1,8),h.writeUInt16LE(1,10),h.writeUInt32LE(p,12),h.writeUInt32LE(l,16),h.writeUInt16LE(0,20),Buffer.concat([m,i,d,h])}function Ie(e){let t=[];for(let i=0;i<256;i++){let s=i;for(let o=0;o<8;o++)s=s&1?3988292384^s>>>1:s>>>1;t[i]=s}let r=4294967295;for(let i=0;i<e.length;i++)r=t[(r^e[i])&255]^r>>>8;return(r^4294967295)>>>0}class C{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async createFunction(e){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(e)})}async getFunction(e){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(e)}`,headers:{"Content-Type":"application/json"}})}async updateFunctionCode(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(t)}/code`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateFunctionCodeInline(e,t,r="index.js"){let i=B(r,t);return this.updateFunctionCode({FunctionName:e,ZipFile:i.toString("base64")})}async updateFunctionConfiguration(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(t)}/configuration`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async deleteFunction(e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(e)}`,headers:{"Content-Type":"application/json"}})}async invoke(e){let{FunctionName:t,InvocationType:r="RequestResponse",Payload:i,LogType:s}=e,o={"Content-Type":"application/json","X-Amz-Invocation-Type":r};if(s)o["X-Amz-Log-Type"]=s;let c=i?typeof i==="string"?i:JSON.stringify(i):void 0,u=await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/invocations`,headers:o,body:c,returnHeaders:!0});return{StatusCode:u.statusCode||200,FunctionError:u.headers?.["x-amz-function-error"],LogResult:u.headers?.["x-amz-log-result"],Payload:typeof u.body==="string"?u.body:JSON.stringify(u.body),ExecutedVersion:u.headers?.["x-amz-executed-version"]}}async listFunctions(e){let t={};if(e?.MaxItems)t.MaxItems=String(e.MaxItems);if(e?.Marker)t.Marker=e.Marker;if(e?.FunctionVersion)t.FunctionVersion=e.FunctionVersion;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:"/2015-03-31/functions",queryParams:Object.keys(t).length>0?t:void 0,headers:{"Content-Type":"application/json"}})}async addPermission(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async removePermission(e,t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(e)}/policy/${encodeURIComponent(t)}`,headers:{"Content-Type":"application/json"}})}async publishVersion(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async createAlias(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/aliases`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateAlias(e){let{FunctionName:t,Name:r,...i}=e;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(t)}/aliases/${encodeURIComponent(r)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}async getAlias(e,t){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(e)}/aliases/${encodeURIComponent(t)}`})}catch(r){if(/ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async getProvisionedConcurrencyConfig(e,t){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-09-30/functions/${encodeURIComponent(e)}/provisioned-concurrency`,queryParams:{Qualifier:t}})}catch(r){if(/ProvisionedConcurrencyConfigNotFound|ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async putProvisionedConcurrencyConfig(e){let{FunctionName:t,Qualifier:r,ProvisionedConcurrentExecutions:i}=e;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-09-30/functions/${encodeURIComponent(t)}/provisioned-concurrency`,queryParams:{Qualifier:r},headers:{"Content-Type":"application/json"},body:JSON.stringify({ProvisionedConcurrentExecutions:i})})}async getFunctionConcurrency(e){try{return(await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-10-31/functions/${encodeURIComponent(e)}/concurrency`}))?.ReservedConcurrentExecutions??null}catch(t){if(/ResourceNotFound|ProvisionedConcurrencyConfigNotFound/i.test(String(t?.message)))return null;throw t}}async putFunctionConcurrency(e,t){await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-10-31/functions/${encodeURIComponent(e)}/concurrency`,headers:{"Content-Type":"application/json"},body:JSON.stringify({ReservedConcurrentExecutions:t})})}async deleteFunctionConcurrency(e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-10-31/functions/${encodeURIComponent(e)}/concurrency`})}async deleteProvisionedConcurrencyConfig(e,t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-09-30/functions/${encodeURIComponent(e)}/provisioned-concurrency`,queryParams:{Qualifier:t}})}async waitForFunctionActive(e,t=60){let r=Date.now(),i=t*1000;while(Date.now()-r<i)try{let s=await this.getFunction(e),o=s.Configuration?.State;if(o==="Active")return s.Configuration;if(o==="Failed")throw Error(`Function ${e} failed: ${s.Configuration?.StateReason}`);await new Promise((c)=>setTimeout(c,2000))}catch(s){if(s.code==="ResourceNotFoundException"){await new Promise((o)=>setTimeout(o,2000));continue}throw s}throw Error(`Timeout waiting for function ${e} to become active`)}async functionExists(e){try{return await this.getFunction(e),!0}catch(t){if(t.code==="ResourceNotFoundException"||t.statusCode===404)return!1;throw t}}async createFunctionUrl(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2021-10-31/functions/${encodeURIComponent(t)}/url`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async getFunctionUrl(e){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2021-10-31/functions/${encodeURIComponent(e)}/url`,headers:{"Content-Type":"application/json"}})}catch(t){if(t.statusCode===404)return null;throw t}}async deleteFunctionUrl(e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2021-10-31/functions/${encodeURIComponent(e)}/url`,headers:{"Content-Type":"application/json"}})}async createFunctionWithCode(e){let{Code:t,Filename:r="index.js",...i}=e,s=B(r,t);return this.createFunction({...i,Code:{ZipFile:s.toString("base64")}})}async addFunctionUrlPermission(e){return this.addPermission({FunctionName:e,StatementId:"FunctionURLAllowPublicAccess",Action:"lambda:InvokeFunctionUrl",Principal:"*",FunctionUrlAuthType:"NONE"})}async publishLayerVersion(e){let{LayerName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async listLayerVersions(e,t){let r={};if(t?.CompatibleRuntime)r.CompatibleRuntime=t.CompatibleRuntime;if(t?.CompatibleArchitecture)r.CompatibleArchitecture=t.CompatibleArchitecture;if(t?.MaxItems)r.MaxItems=String(t.MaxItems);if(t?.Marker)r.Marker=t.Marker;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions`,queryParams:Object.keys(r).length>0?r:void 0,headers:{"Content-Type":"application/json"}})}async getLayerVersion(e,t){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions/${t}`,headers:{"Content-Type":"application/json"}})}async addLayerVersionPermission(e){let{LayerName:t,VersionNumber:r,...i}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions/${r}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}async deleteLayerVersion(e,t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions/${t}`,headers:{"Content-Type":"application/json"}})}}class ue{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async createLogGroup(e,t){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:e,...t?{tags:t}:{}})})}async putRetentionPolicy(e,t){if(![1,3,5,7,14,30,60,90,120,150,180,365,400,545,731,1096,1827,2192,2557,2922,3288,3653].includes(t))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:e,retentionInDays:t})})}async describeLogStreams(e){let t={logGroupName:e.logGroupName};if(e.logStreamNamePrefix)t.logStreamNamePrefix=e.logStreamNamePrefix;if(e.orderBy)t.orderBy=e.orderBy;if(e.descending!==void 0)t.descending=e.descending;if(e.limit)t.limit=e.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(t)})}async getLogEvents(e){let t={logGroupName:e.logGroupName,logStreamName:e.logStreamName};if(e.startTime)t.startTime=e.startTime;if(e.endTime)t.endTime=e.endTime;if(e.limit)t.limit=e.limit;if(e.startFromHead!==void 0)t.startFromHead=e.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(t)})}async describeLogGroups(e){let t={};if(e?.logGroupNamePrefix)t.logGroupNamePrefix=e.logGroupNamePrefix;if(e?.limit)t.limit=e.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(t)})}async deleteLogGroup(e){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:e})})}async filterLogEvents(e){let t={logGroupName:e.logGroupName};if(e.logStreamNames)t.logStreamNames=e.logStreamNames;if(e.startTime)t.startTime=e.startTime;if(e.endTime)t.endTime=e.endTime;if(e.filterPattern)t.filterPattern=e.filterPattern;if(e.limit)t.limit=e.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(t)})}}class rn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createInstance(e){let t={InstanceAlias:e.InstanceAlias,IdentityManagementType:e.IdentityManagementType||"CONNECT_MANAGED",InboundCallsEnabled:e.InboundCallsEnabled??!0,OutboundCallsEnabled:e.OutboundCallsEnabled??!0};if(e.DirectoryId)t.DirectoryId=e.DirectoryId;if(e.ClientToken)t.ClientToken=e.ClientToken;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:"/instance",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async deleteInstance(e){await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/instance/${e}`})}async describeInstance(e){let t=await this.client.request({service:"connect",region:this.region,method:"GET",path:`/instance/${e}`});return t.Instance||t}async listInstances(e){let t={};if(e?.MaxResults)t.maxResults=String(e.MaxResults);if(e?.NextToken)t.nextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"GET",path:"/instance",queryParams:t})}async searchAvailablePhoneNumbers(e){let t={TargetArn:e.TargetArn,PhoneNumberCountryCode:e.PhoneNumberCountryCode,PhoneNumberType:e.PhoneNumberType};if(e.PhoneNumberPrefix)t.PhoneNumberPrefix=e.PhoneNumberPrefix;if(e.MaxResults)t.MaxResults=e.MaxResults;if(e.NextToken)t.NextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/search-available",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async claimPhoneNumber(e){let t={TargetArn:e.TargetArn,PhoneNumber:e.PhoneNumber};if(e.PhoneNumberDescription)t.PhoneNumberDescription=e.PhoneNumberDescription;if(e.Tags)t.Tags=e.Tags;if(e.ClientToken)t.ClientToken=e.ClientToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/claim",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async releasePhoneNumber(e,t){let r={};if(t)r.clientToken=t;await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/phone-number/${e}`,queryParams:r})}async listPhoneNumbers(e){let t={};if(e.TargetArn)t.TargetArn=e.TargetArn;if(e.InstanceId)t.InstanceId=e.InstanceId;if(e.PhoneNumberTypes)t.PhoneNumberTypes=e.PhoneNumberTypes;if(e.PhoneNumberCountryCodes)t.PhoneNumberCountryCodes=e.PhoneNumberCountryCodes;if(e.MaxResults)t.MaxResults=e.MaxResults;if(e.NextToken)t.NextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/list",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async createContactFlow(e){let t={Name:e.Name,Type:e.Type,Content:e.Content};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact-flows/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async updateContactFlowContent(e){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact-flows/${e.InstanceId}/${e.ContactFlowId}/content`,headers:{"Content-Type":"application/json"},body:JSON.stringify({Content:e.Content})})}async listContactFlows(e){let t={};if(e.ContactFlowTypes)t.contactFlowTypes=e.ContactFlowTypes.join(",");if(e.MaxResults)t.maxResults=String(e.MaxResults);if(e.NextToken)t.nextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"GET",path:`/contact-flows-summary/${e.InstanceId}`,queryParams:t})}async createQueue(e){let t={Name:e.Name,HoursOfOperationId:e.HoursOfOperationId};if(e.Description)t.Description=e.Description;if(e.MaxContacts)t.MaxContacts=e.MaxContacts;if(e.OutboundCallerConfig)t.OutboundCallerConfig=e.OutboundCallerConfig;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/queues/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async createHoursOfOperation(e){let t={Name:e.Name,TimeZone:e.TimeZone,Config:e.Config};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/hours-of-operations/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async associatePhoneNumberContactFlow(e){await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/phone-number/${e.PhoneNumberId}/contact-flow`,headers:{"Content-Type":"application/json"},body:JSON.stringify({InstanceId:e.InstanceId,ContactFlowId:e.ContactFlowId})})}async createRoutingProfile(e){let t={Name:e.Name,DefaultOutboundQueueId:e.DefaultOutboundQueueId,MediaConcurrencies:e.MediaConcurrencies};if(e.Description)t.Description=e.Description;if(e.QueueConfigs)t.QueueConfigs=e.QueueConfigs;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/routing-profiles/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async instanceExists(e){try{return(await this.listInstances({MaxResults:100})).InstanceSummaryList?.some((r)=>r.InstanceAlias===e)||!1}catch{return!1}}async startOutboundVoiceContact(e){let t={ContactFlowId:e.ContactFlowId,DestinationPhoneNumber:e.DestinationPhoneNumber};if(e.SourcePhoneNumber)t.SourcePhoneNumber=e.SourcePhoneNumber;if(e.QueueId)t.QueueId=e.QueueId;if(e.Attributes)t.Attributes=e.Attributes;if(e.AnswerMachineDetectionConfig)t.AnswerMachineDetectionConfig=e.AnswerMachineDetectionConfig;if(e.CampaignId)t.CampaignId=e.CampaignId;if(e.TrafficType)t.TrafficType=e.TrafficType;if(e.ClientToken)t.ClientToken=e.ClientToken;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/outbound-voice/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async makeCall(e){return this.startOutboundVoiceContact({InstanceId:e.instanceId,ContactFlowId:e.contactFlowId,DestinationPhoneNumber:e.to,SourcePhoneNumber:e.from,Attributes:e.attributes})}async stopContact(e){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact/stop/${e.InstanceId}/${e.ContactId}`})}async describeContact(e){return this.client.request({service:"connect",region:this.region,method:"GET",path:`/contacts/${e.InstanceId}/${e.ContactId}`})}async updateContactAttributes(e){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact/attributes/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify({InitialContactId:e.InitialContactId,Attributes:e.Attributes})})}async createUser(e){let t={Username:e.Username,PhoneConfig:e.PhoneConfig,SecurityProfileIds:e.SecurityProfileIds,RoutingProfileId:e.RoutingProfileId};if(e.Password)t.Password=e.Password;if(e.IdentityInfo)t.IdentityInfo=e.IdentityInfo;if(e.DirectoryUserId)t.DirectoryUserId=e.DirectoryUserId;if(e.HierarchyGroupId)t.HierarchyGroupId=e.HierarchyGroupId;if(e.Tags)t.Tags=e.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/users/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async deleteUser(e){await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/users/${e.InstanceId}/${e.UserId}`})}async listUsers(e){let t={};if(e.NextToken)t.nextToken=e.NextToken;if(e.MaxResults)t.maxResults=String(e.MaxResults);return this.client.request({service:"connect",region:this.region,method:"GET",path:`/users-summary/${e.InstanceId}`,queryParams:t})}async createPrompt(e){let t={Name:e.Name,S3Uri:e.S3Uri};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/prompts/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async listPrompts(e){let t={};if(e.NextToken)t.nextToken=e.NextToken;if(e.MaxResults)t.maxResults=String(e.MaxResults);return this.client.request({service:"connect",region:this.region,method:"GET",path:`/prompts-summary/${e.InstanceId}`,queryParams:t})}async createQuickConnect(e){let t={Name:e.Name,QuickConnectConfig:e.QuickConnectConfig};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/quick-connects/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async startChatContact(e){return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/chat/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async startTaskContact(e){return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/task/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}createOutboundIvrFlow(e){let t=e.voiceId||"Joanna";return JSON.stringify({Version:"2019-10-30",StartAction:"play-prompt",Actions:{"play-prompt":{Type:"MessageParticipant",Parameters:{Text:e.message,TextToSpeechVoice:t,TextToSpeechEngine:"neural"},Transitions:{NextAction:"disconnect",Errors:[{NextAction:"disconnect",ErrorType:"NoMatchingError"}]}},disconnect:{Type:"DisconnectParticipant",Parameters:{},Transitions:{}}}})}createInputCollectionFlow(e){let t=e.voiceId||"Joanna",r=e.inputTimeout||5,i=e.maxDigits||1;return JSON.stringify({Version:"2019-10-30",StartAction:"get-input",Actions:{"get-input":{Type:"GetParticipantInput",Parameters:{Text:e.promptMessage,TextToSpeechVoice:t,TextToSpeechEngine:"neural",InputTimeLimitSeconds:String(r),MaxDigits:i,EncryptEntry:!1},Transitions:{NextAction:e.successNextAction||"disconnect",Conditions:[],Errors:[{NextAction:"disconnect",ErrorType:"NoMatchingCondition"},{NextAction:"disconnect",ErrorType:"NoMatchingError"}]}},disconnect:{Type:"DisconnectParticipant",Parameters:{},Transitions:{}}}})}async getCurrentMetricData(e){return this.client.request({service:"connect",region:this.region,method:"POST",path:`/metrics/current/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}class Sa{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async describeLoadBalancers(e){let t={};if(e?.LoadBalancerArns)e.LoadBalancerArns.forEach((i,s)=>{t[`LoadBalancerArns.member.${s+1}`]=i});if(e?.Names)e.Names.forEach((i,s)=>{t[`Names.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeLoadBalancers",t)});return this.normalizeResult(r,"DescribeLoadBalancersResult")}async describeTargetGroups(e){let t={};if(e?.LoadBalancerArn)t.LoadBalancerArn=e.LoadBalancerArn;if(e?.TargetGroupArns)e.TargetGroupArns.forEach((i,s)=>{t[`TargetGroupArns.member.${s+1}`]=i});if(e?.Names)e.Names.forEach((i,s)=>{t[`Names.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetGroups",t)});return this.normalizeResult(r,"DescribeTargetGroupsResult")}async describeTargetHealth(e){let t={TargetGroupArn:e.TargetGroupArn};if(e.Targets)e.Targets.forEach((i,s)=>{if(t[`Targets.member.${s+1}.Id`]=i.Id,i.Port)t[`Targets.member.${s+1}.Port`]=i.Port;if(i.AvailabilityZone)t[`Targets.member.${s+1}.AvailabilityZone`]=i.AvailabilityZone});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetHealth",t)});return this.normalizeResult(r,"DescribeTargetHealthResult")}async describeListeners(e){let t={};if(e?.LoadBalancerArn)t.LoadBalancerArn=e.LoadBalancerArn;if(e?.ListenerArns)e.ListenerArns.forEach((i,s)=>{t[`ListenerArns.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeListeners",t)});return this.normalizeResult(r,"DescribeListenersResult")}async describeRules(e){let t={};if(e?.ListenerArn)t.ListenerArn=e.ListenerArn;if(e?.RuleArns)e.RuleArns.forEach((i,s)=>{t[`RuleArns.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeRules",t)});return this.normalizeResult(r,"DescribeRulesResult")}async describeLoadBalancerAttributes(e){let t={LoadBalancerArn:e},r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeLoadBalancerAttributes",t)});return this.normalizeResult(r,"DescribeLoadBalancerAttributesResult")}async describeTargetGroupAttributes(e){let t={TargetGroupArn:e},r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetGroupAttributes",t)});return this.normalizeResult(r,"DescribeTargetGroupAttributesResult")}async createLoadBalancer(e){let t={Name:e.Name};if(e.Subnets)e.Subnets.forEach((i,s)=>{t[`Subnets.member.${s+1}`]=i});if(e.SubnetMappings)e.SubnetMappings.forEach((i,s)=>{if(t[`SubnetMappings.member.${s+1}.SubnetId`]=i.SubnetId,i.AllocationId)t[`SubnetMappings.member.${s+1}.AllocationId`]=i.AllocationId;if(i.PrivateIPv4Address)t[`SubnetMappings.member.${s+1}.PrivateIPv4Address`]=i.PrivateIPv4Address;if(i.IPv6Address)t[`SubnetMappings.member.${s+1}.IPv6Address`]=i.IPv6Address});if(e.SecurityGroups)e.SecurityGroups.forEach((i,s)=>{t[`SecurityGroups.member.${s+1}`]=i});if(e.Scheme)t.Scheme=e.Scheme;if(e.Type)t.Type=e.Type;if(e.IpAddressType)t.IpAddressType=e.IpAddressType;if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateLoadBalancer",t)});return this.normalizeResult(r,"CreateLoadBalancerResult")}async deleteLoadBalancer(e){let t={LoadBalancerArn:e};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteLoadBalancer",t)})}async createTargetGroup(e){let t={Name:e.Name};if(e.Protocol)t.Protocol=e.Protocol;if(e.ProtocolVersion)t.ProtocolVersion=e.ProtocolVersion;if(e.Port)t.Port=e.Port;if(e.VpcId)t.VpcId=e.VpcId;if(e.HealthCheckProtocol)t.HealthCheckProtocol=e.HealthCheckProtocol;if(e.HealthCheckPort)t.HealthCheckPort=e.HealthCheckPort;if(e.HealthCheckEnabled!==void 0)t.HealthCheckEnabled=e.HealthCheckEnabled;if(e.HealthCheckPath)t.HealthCheckPath=e.HealthCheckPath;if(e.HealthCheckIntervalSeconds)t.HealthCheckIntervalSeconds=e.HealthCheckIntervalSeconds;if(e.HealthCheckTimeoutSeconds)t.HealthCheckTimeoutSeconds=e.HealthCheckTimeoutSeconds;if(e.HealthyThresholdCount)t.HealthyThresholdCount=e.HealthyThresholdCount;if(e.UnhealthyThresholdCount)t.UnhealthyThresholdCount=e.UnhealthyThresholdCount;if(e.TargetType)t.TargetType=e.TargetType;if(e.IpAddressType)t.IpAddressType=e.IpAddressType;if(e.Matcher){if(e.Matcher.HttpCode)t["Matcher.HttpCode"]=e.Matcher.HttpCode;if(e.Matcher.GrpcCode)t["Matcher.GrpcCode"]=e.Matcher.GrpcCode}if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateTargetGroup",t)});return this.normalizeResult(r,"CreateTargetGroupResult")}async deleteTargetGroup(e){let t={TargetGroupArn:e};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteTargetGroup",t)})}async registerTargets(e){let t={TargetGroupArn:e.TargetGroupArn};e.Targets.forEach((r,i)=>{if(t[`Targets.member.${i+1}.Id`]=r.Id,r.Port)t[`Targets.member.${i+1}.Port`]=r.Port;if(r.AvailabilityZone)t[`Targets.member.${i+1}.AvailabilityZone`]=r.AvailabilityZone}),await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("RegisterTargets",t)})}async deregisterTargets(e){let t={TargetGroupArn:e.TargetGroupArn};e.Targets.forEach((r,i)=>{if(t[`Targets.member.${i+1}.Id`]=r.Id,r.Port)t[`Targets.member.${i+1}.Port`]=r.Port;if(r.AvailabilityZone)t[`Targets.member.${i+1}.AvailabilityZone`]=r.AvailabilityZone}),await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeregisterTargets",t)})}async createListener(e){let t={LoadBalancerArn:e.LoadBalancerArn,Port:e.Port};if(e.Protocol)t.Protocol=e.Protocol;if(e.SslPolicy)t.SslPolicy=e.SslPolicy;if(e.Certificates)e.Certificates.forEach((i,s)=>{t[`Certificates.member.${s+1}.CertificateArn`]=i.CertificateArn});if(e.DefaultActions.forEach((i,s)=>{if(t[`DefaultActions.member.${s+1}.Type`]=i.Type,i.TargetGroupArn)t[`DefaultActions.member.${s+1}.TargetGroupArn`]=i.TargetGroupArn;if(i.Order!==void 0)t[`DefaultActions.member.${s+1}.Order`]=i.Order;if(i.RedirectConfig){let o=i.RedirectConfig;if(o.Protocol)t[`DefaultActions.member.${s+1}.RedirectConfig.Protocol`]=o.Protocol;if(o.Port)t[`DefaultActions.member.${s+1}.RedirectConfig.Port`]=o.Port;if(o.Host)t[`DefaultActions.member.${s+1}.RedirectConfig.Host`]=o.Host;if(o.Path)t[`DefaultActions.member.${s+1}.RedirectConfig.Path`]=o.Path;if(o.Query)t[`DefaultActions.member.${s+1}.RedirectConfig.Query`]=o.Query;t[`DefaultActions.member.${s+1}.RedirectConfig.StatusCode`]=o.StatusCode}if(i.FixedResponseConfig){let o=i.FixedResponseConfig;if(o.MessageBody)t[`DefaultActions.member.${s+1}.FixedResponseConfig.MessageBody`]=o.MessageBody;if(t[`DefaultActions.member.${s+1}.FixedResponseConfig.StatusCode`]=o.StatusCode,o.ContentType)t[`DefaultActions.member.${s+1}.FixedResponseConfig.ContentType`]=o.ContentType}}),e.AlpnPolicy)e.AlpnPolicy.forEach((i,s)=>{t[`AlpnPolicy.member.${s+1}`]=i});if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateListener",t)});return this.normalizeResult(r,"CreateListenerResult")}async deleteListener(e){let t={ListenerArn:e};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteListener",t)})}async modifyListener(e){let t={ListenerArn:e.ListenerArn};if(e.Port)t.Port=e.Port;if(e.Protocol)t.Protocol=e.Protocol;if(e.SslPolicy)t.SslPolicy=e.SslPolicy;if(e.Certificates)e.Certificates.forEach((i,s)=>{t[`Certificates.member.${s+1}.CertificateArn`]=i.CertificateArn});if(e.DefaultActions)e.DefaultActions.forEach((i,s)=>{if(i.Type)t[`DefaultActions.member.${s+1}.Type`]=i.Type;if(i.TargetGroupArn)t[`DefaultActions.member.${s+1}.TargetGroupArn`]=i.TargetGroupArn;if(i.Order!==void 0)t[`DefaultActions.member.${s+1}.Order`]=i.Order});if(e.AlpnPolicy)e.AlpnPolicy.forEach((i,s)=>{t[`AlpnPolicy.member.${s+1}`]=i});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("ModifyListener",t)});return this.normalizeResult(r,"ModifyListenerResult")}buildFormBody(e,t){let r={Action:e,Version:"2015-12-01"};for(let[i,s]of Object.entries(t))if(s!==void 0&&s!==null)r[i]=String(s);return Object.entries(r).map(([i,s])=>`${encodeURIComponent(i)}=${encodeURIComponent(s)}`).join("&")}normalizeResult(e,t){if(e&&e[t])return this.normalizeArrays(e[t]);let r=t.replace("Result","Response");if(e&&e[r]&&e[r][t])return this.normalizeArrays(e[r][t]);return this.normalizeArrays(e)}normalizeArrays(e){if(!e||typeof e!=="object")return e;if(Array.isArray(e))return e.map((r)=>this.normalizeArrays(r));let t={};for(let[r,i]of Object.entries(e)){let s=["LoadBalancers","TargetGroups","Listeners","Rules","TargetHealthDescriptions","Attributes","SecurityGroups","AvailabilityZones","Certificates","DefaultActions","Conditions","Actions","member"];if(r==="member"){if(Array.isArray(i))return i.map((o)=>this.normalizeArrays(o));return[this.normalizeArrays(i)]}if(s.includes(r))if(i&&typeof i==="object"&&"member"in i){let o=i.member;t[r]=Array.isArray(o)?o.map((c)=>this.normalizeArrays(c)):[this.normalizeArrays(o)]}else if(Array.isArray(i))t[r]=i.map((o)=>this.normalizeArrays(o));else if(i)t[r]=[this.normalizeArrays(i)];else t[r]=[];else if(typeof i==="object")t[r]=this.normalizeArrays(i);else t[r]=i}return t}}class De{client;region;endpoint;constructor(e="us-east-1",t){this.region=e,this.endpoint=t?.endpoint,this.client=new n}async request(e,t){if(this.endpoint){let r=await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${e}`},body:JSON.stringify(t)});if(!r.ok){let i=await r.text();throw Error(`DynamoDB request failed: ${r.status} ${i}`)}return r.json()}return this.client.request({service:"dynamodb",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${e}`},body:JSON.stringify(t)})}async createTable(e){return this.request("CreateTable",e)}async deleteTable(e){return this.request("DeleteTable",e)}async describeTable(e){return this.request("DescribeTable",e)}async listTables(e){return this.request("ListTables",e||{})}async putItem(e){return this.request("PutItem",e)}async getItem(e){return this.request("GetItem",e)}async updateItem(e){return this.request("UpdateItem",e)}async deleteItem(e){return this.request("DeleteItem",e)}async query(e){return this.request("Query",e)}async scan(e){return this.request("Scan",e)}async batchWriteItem(e){return this.request("BatchWriteItem",e)}async batchGetItem(e){return this.request("BatchGetItem",e)}async updateTimeToLive(e){return this.request("UpdateTimeToLive",e)}static marshal(e){let t={};for(let[r,i]of Object.entries(e))t[r]=De.marshalValue(i);return t}static marshalValue(e){if(e===null||e===void 0)return{NULL:!0};if(typeof e==="string")return{S:e};if(typeof e==="number")return{N:String(e)};if(typeof e==="boolean")return{BOOL:e};if(Array.isArray(e))return{L:e.map((t)=>De.marshalValue(t))};if(typeof e==="object")return{M:De.marshal(e)};return{S:String(e)}}static unmarshal(e){let t={};for(let[r,i]of Object.entries(e))t[r]=De.unmarshalValue(i);return t}static unmarshalValue(e){if(e.S!==void 0)return e.S;if(e.N!==void 0)return Number(e.N);if(e.BOOL!==void 0)return e.BOOL;if(e.NULL!==void 0)return null;if(e.L!==void 0)return e.L.map((t)=>De.unmarshalValue(t));if(e.M!==void 0)return De.unmarshal(e.M);if(e.SS!==void 0)return e.SS;if(e.NS!==void 0)return e.NS.map(Number);return null}}class Ca{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createDomain(e){return this.client.request({service:"es",region:this.region,method:"POST",path:"/2021-01-01/opensearch/domain",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteDomain(e){return this.client.request({service:"es",region:this.region,method:"DELETE",path:`/2021-01-01/opensearch/domain/${e}`})}async describeDomain(e){return this.client.request({service:"es",region:this.region,method:"GET",path:`/2021-01-01/opensearch/domain/${e}`})}async listDomainNames(){return this.client.request({service:"es",region:this.region,method:"GET",path:"/2021-01-01/domain"})}async updateDomainConfig(e){let{DomainName:t,...r}=e;return this.client.request({service:"es",region:this.region,method:"POST",path:`/2021-01-01/opensearch/domain/${t}/config`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}}class nn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"transcribe",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Transcribe.${e}`},body:JSON.stringify(t)})}async startTranscriptionJob(e){return this.request("StartTranscriptionJob",e)}async getTranscriptionJob(e){return this.request("GetTranscriptionJob",e)}async listTranscriptionJobs(e){return this.request("ListTranscriptionJobs",e||{})}async deleteTranscriptionJob(e){return this.request("DeleteTranscriptionJob",e)}}class sn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async invokeModel(e){let t=typeof e.body==="string"?e.body:e.body instanceof Uint8Array?new TextDecoder().decode(e.body):JSON.stringify(e.body),r={"Content-Type":e.contentType||"application/json",Accept:e.accept||"application/json"};if(e.trace)r["X-Amzn-Bedrock-Trace"]=e.trace;if(e.guardrailIdentifier)r["X-Amzn-Bedrock-GuardrailIdentifier"]=e.guardrailIdentifier;if(e.guardrailVersion)r["X-Amzn-Bedrock-GuardrailVersion"]=e.guardrailVersion;let i=await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(e.modelId)}/invoke`,headers:r,body:t,rawResponse:!0,returnHeaders:!0});return{body:new TextEncoder().encode(i.body),contentType:i.headers?.["content-type"]||"application/json"}}async invokeModelWithResponseStream(e){let t=typeof e.body==="string"?e.body:e.body instanceof Uint8Array?new TextDecoder().decode(e.body):JSON.stringify(e.body),r={"Content-Type":e.contentType||"application/json",Accept:e.accept||"application/vnd.amazon.eventstream"};if(e.trace)r["X-Amzn-Bedrock-Trace"]=e.trace;if(e.guardrailIdentifier)r["X-Amzn-Bedrock-GuardrailIdentifier"]=e.guardrailIdentifier;if(e.guardrailVersion)r["X-Amzn-Bedrock-GuardrailVersion"]=e.guardrailVersion;return{body:await this.makeStreamRequest(e.modelId,r,t),contentType:"application/vnd.amazon.eventstream"}}async makeStreamRequest(e,t,r){let i=this.getCredentialsFromEnv(),s=`https://bedrock-runtime.${this.region}.amazonaws.com/model/${encodeURIComponent(e)}/invoke-with-response-stream`,o=this.signStreamRequest("POST",`/model/${encodeURIComponent(e)}/invoke-with-response-stream`,t,r,i),c=await fetch(s,{method:"POST",headers:o,body:r});if(!c.ok){let g=await c.text();throw Error(`Bedrock streaming error (${c.status}): ${g}`)}let u=c.body?.getReader();if(!u)throw Error("No response body for streaming");return this.parseEventStream(u)}async*parseEventStream(e){let t=new TextDecoder,r="";try{while(!0){let{done:i,value:s}=await e.read();if(i)break;r+=t.decode(s,{stream:!0});let o=this.extractJsonChunks(r);for(let c of o.parsed)yield{chunk:{bytes:new TextEncoder().encode(JSON.stringify(c))}};r=o.remaining}}finally{e.releaseLock()}}extractJsonChunks(e){let t=[],r=e,i=0,s=-1;for(let o=0;o<r.length;o++)if(r[o]==="{"){if(i===0)s=o;i++}else if(r[o]==="}"){if(i--,i===0&&s!==-1)try{let c=JSON.parse(r.slice(s,o+1));t.push(c),r=r.slice(o+1),o=-1,s=-1}catch{}}return{parsed:t,remaining:r}}getCredentialsFromEnv(){let e=process.env.AWS_ACCESS_KEY_ID,t=process.env.AWS_SECRET_ACCESS_KEY,r=process.env.AWS_SESSION_TOKEN;if(!e||!t)throw Error("AWS credentials not found in environment variables");return{accessKeyId:e,secretAccessKey:t,sessionToken:r}}signStreamRequest(e,t,r,i,s){let o=_e("node:crypto"),c="bedrock-runtime",u=this.region,g=`bedrock-runtime.${u}.amazonaws.com`,m=new Date,d=m.toISOString().replace(/[:-]|\.\d{3}/g,""),l=m.toISOString().slice(0,10).replace(/-/g,""),p={host:g,"x-amz-date":d,...r};if(s.sessionToken)p["x-amz-security-token"]=s.sessionToken;let h=o.createHash("sha256").update(i,"utf8").digest("hex");p["x-amz-content-sha256"]=h,p["content-length"]=Buffer.byteLength(i).toString();let y=Object.keys(p).sort((E,ee)=>E.toLowerCase().localeCompare(ee.toLowerCase())),f=y.map((E)=>`${E.toLowerCase()}:${p[E].trim()}
|
|
1
|
+
import{n}from"./chunk-30h9rgfn.js";import{Nt,a}from"./chunk-yq3pdbz7.js";import{Xe}from"./chunk-cy6qh4ea.js";import{Oe}from"./chunk-hnkw6pde.js";class Jt{region;client;constructor(e="us-east-1",t=new n){this.region=e;this.client=t}request(e,t){return this.client.request({service:"backup",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`CryoControllerFrontendService.${e}`},body:JSON.stringify(t)})}startBackupJob(e){return this.request("StartBackupJob",e)}describeBackupJob(e){return this.request("DescribeBackupJob",{BackupJobId:e})}startRestoreJob(e){return this.request("StartRestoreJob",e)}describeRestoreJob(e){return this.request("DescribeRestoreJob",{RestoreJobId:e})}deleteRecoveryPoint(e,t){return this.request("DeleteRecoveryPoint",{BackupVaultName:e,RecoveryPointArn:t})}}function te(e,t){if(!t)return e;return e.startsWith(t)?e.slice(t.length):e}function zi(e,t,r){let i=te(e,t);return`${r??""}${i}`}function Ki(e,t,r){if(r&&r.some((i)=>e.startsWith(i)))return!1;if(t&&t.length>0)return t.some((i)=>e.startsWith(i));return!0}async function ie(e,t,r){let i=0,s=[],o=Math.max(1,Math.min(t,e.length||1));for(let c=0;c<o;c++)s.push((async()=>{while(!0){let u=i++;if(u>=e.length)return;await r(e[u],u)}})());await Promise.all(s)}function v(e){if(e.client)return e.client;return Wi({provider:e.provider,region:e.region,endpoint:e.endpoint,forcePathStyle:e.forcePathStyle,credentials:e.credentials})}async function Hl(e){let t=e.concurrency??8,r=v(e.from),i=v(e.to),s=await r.listAllObjects({bucket:e.from.bucket,prefix:e.from.prefix}),o={copied:0,skipped:0,excluded:0,bytesCopied:0,errors:[],excludedKeys:[],deleted:[]},c=[];for(let d of s){if(!Ki(d.Key,e.include,e.exclude)){o.excluded++,o.excludedKeys.push(d.Key);continue}c.push({source:d,destKey:zi(d.Key,e.from.prefix,e.to.prefix)})}if(e.dryRun){o.plan=c.map(({source:p,destKey:h})=>({key:p.Key,destKey:h,size:p.Size}));let d=s.length,l=0;for(let p of s){l++;let h=!Ki(p.Key,e.include,e.exclude);e.onProgress?.({key:p.Key,destKey:h?"":zi(p.Key,e.from.prefix,e.to.prefix),size:p.Size,action:h?"excluded":"planned",index:l,total:d})}return o}let u=c.length,g=0;await ie(c,t,async({source:d,destKey:l})=>{let p=++g;try{if(!e.force){let f=await i.headObject(e.to.bucket,l);if(f&&f.ContentLength===d.Size){o.skipped++,e.onProgress?.({key:d.Key,destKey:l,size:d.Size,action:"skipped",index:p,total:u});return}}let{body:h,contentType:y}=await r.getObjectBytes(e.from.bucket,d.Key);await i.putObject({bucket:e.to.bucket,key:l,body:h,contentType:y}),o.copied++,o.bytesCopied+=h.byteLength,e.onProgress?.({key:d.Key,destKey:l,size:d.Size,action:"copied",index:p,total:u})}catch(h){o.errors.push({key:d.Key,message:h?.message??String(h)}),e.onProgress?.({key:d.Key,destKey:l,size:d.Size,action:"error",index:p,total:u})}});let m=new Set(c.map((d)=>d.destKey));if(e.deleteExtraneous){let l=(await i.listAllObjects({bucket:e.to.bucket,prefix:e.to.prefix})).filter((p)=>!m.has(p.Key)).map((p)=>p.Key);for(let p of l)try{await i.deleteObject(e.to.bucket,p),o.deleted.push(p)}catch(h){o.errors.push({key:p,message:`delete failed: ${h?.message??String(h)}`})}}if(e.verify){let d=await i.listAllObjects({bucket:e.to.bucket,prefix:e.to.prefix}),l=new Map(d.map((f)=>[f.Key,f.Size])),p=[],h=[],y=0;for(let{source:f,destKey:S}of c){if(!l.has(S)){p.push(S);continue}let b=l.get(S);if(b!==f.Size){h.push({key:S,expected:f.Size,actual:b});continue}y++}o.verification={ok:p.length===0&&h.length===0,matched:y,missing:p,sizeMismatches:h}}return o}var se={aws:"us-east-1",backblaze:"us-west-004",hetzner:"fsn1"};function ya(e,t){switch(e){case"backblaze":return`s3.${t}.backblazeb2.com`;case"hetzner":return`${t}.your-objectstorage.com`;case"aws":default:return}}function T(...e){for(let t of e){let r=process.env[t];if(r)return r}return}function oe(e,t){if(t?.accessKeyId&&t.secretAccessKey)return t;let r,i;if(e==="backblaze")r=T("B2_APPLICATION_KEY_ID","B2_KEY_ID","S3_ACCESS_KEY_ID","AWS_ACCESS_KEY_ID"),i=T("B2_APPLICATION_KEY","B2_SECRET_KEY","S3_SECRET_ACCESS_KEY","AWS_SECRET_ACCESS_KEY");else if(e==="hetzner")r=T("HETZNER_S3_ACCESS_KEY","HETZNER_ACCESS_KEY","S3_ACCESS_KEY_ID","AWS_ACCESS_KEY_ID"),i=T("HETZNER_S3_SECRET_KEY","HETZNER_SECRET_KEY","S3_SECRET_ACCESS_KEY","AWS_SECRET_ACCESS_KEY");else r=T("S3_ACCESS_KEY_ID"),i=T("S3_SECRET_ACCESS_KEY");if(r&&i)return{accessKeyId:r,secretAccessKey:i,sessionToken:T("AWS_SESSION_TOKEN")};return}function Ia(e={}){let t=e.provider||T("OBJECT_STORAGE_PROVIDER","STORAGE_PROVIDER")||"aws",r=e.region||(t==="backblaze"?T("B2_REGION"):void 0)||(t==="hetzner"?T("HETZNER_S3_REGION","HETZNER_REGION"):void 0)||T("S3_REGION","AWS_REGION","AWS_DEFAULT_REGION")||se[t],i=e.endpoint||T("S3_ENDPOINT")||ya(t,r),s=e.forcePathStyle??T("S3_FORCE_PATH_STYLE")==="true",o=oe(t,e.credentials),c=(u)=>{let g=i||`s3.${r}.amazonaws.com`;return s?`https://${g}/${u}`:`https://${u}.${g}`};return{provider:t,region:r,endpoint:i,forcePathStyle:s,credentials:o,profile:e.profile,publicBaseUrl:c}}function Wi(e={}){let t=Ia(e),r={endpoint:t.endpoint,forcePathStyle:t.forcePathStyle,credentials:t.credentials};return new a(t.region,t.profile,r)}import{createHash as ae}from"node:crypto";import{existsSync as ce,mkdirSync as ge,readdirSync as Ge,readFileSync as de,rmSync as qe,writeFileSync as me}from"node:fs";import{homedir as le}from"node:os";import{join as x}from"node:path";var w=1,k=3600000,he=24*k,ye=k,fe=30*he;function Se(){let e=process.env.XDG_CACHE_HOME;return x(e&&e.trim()?e:x(le(),".cache"),"ts-cloud","cost-explorer")}function L(e){return x(Se(),e??"__default__")}function M(e){let t={s:e.start,e:e.end,g:e.granularity,m:[...e.metrics].sort(),gb:[...e.groupBy].map((r)=>`${r.Type}:${r.Key}`).sort(),f:e.filter??null};return ae("sha256").update(JSON.stringify(t)).digest("hex").slice(0,24)}function be(e,t){let r=Date.parse(`${t}T00:00:00Z`);if(Number.isNaN(r))return!1;let i=new Date,s=Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),1);return r<=s}function Ce(e){return be(e.start,e.end)?fe:ye}function F(e,t){let r=x(L(e),`${M(t)}.json`);if(!ce(r))return null;let i;try{i=JSON.parse(de(r,"utf-8"))}catch{return null}if(i.schema!==w)return null;let s=Date.now()-i.savedAt;if(s<0||s>Ce(t))return null;return{response:i.response,ageSeconds:Math.floor(s/1000)}}function U(e,t,r){let i=L(e);ge(i,{recursive:!0});let s={schema:w,savedAt:Date.now(),key:t,response:r};me(x(i,`${M(t)}.json`),JSON.stringify(s))}class Ji{client;profile;useCache;lastCacheAgeSeconds=null;constructor(e,t){this.profile=e,this.useCache=t?.useCache??!0,this.client=new n(Nt(e))}async getCostByService(e){return(await this.getCostByDimension({...e,dimension:"SERVICE"})).map((r)=>({service:r.key,amount:r.amount,unit:r.unit}))}async getCostByDimension(e){let{start:t,end:r,dimension:i,granularity:s="MONTHLY",filter:o}=e,c=["UnblendedCost"],u=[{Type:"DIMENSION",Key:i}],g={start:t,end:r,granularity:s,metrics:c,groupBy:u,filter:o};if(this.useCache){let p=F(this.profile,g);if(p)return this.lastCacheAgeSeconds=p.ageSeconds,p.response}this.lastCacheAgeSeconds=null;let m=new Map,d;do{let p={TimePeriod:{Start:t,End:r},Granularity:s,Metrics:c,GroupBy:u};if(o)p.Filter=o;if(d)p.NextPageToken=d;let h=await this.client.request({service:"ce",region:"us-east-1",method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"AWSInsightsIndexService.GetCostAndUsage"},body:JSON.stringify(p)});for(let y of h?.ResultsByTime??[])for(let f of y?.Groups??[]){let S=f.Keys?.[0]??"Unknown",b=Number.parseFloat(f.Metrics?.UnblendedCost?.Amount??"0"),I=f.Metrics?.UnblendedCost?.Unit??"USD",A=m.get(S);m.set(S,{key:S,amount:(A?.amount??0)+b,unit:I})}d=h?.NextPageToken||void 0}while(d);let l=[...m.values()].filter((p)=>p.amount>0).sort((p,h)=>h.amount-p.amount);if(this.useCache)U(this.profile,g,l);return l}async getDailyTotals(e){return((await this.client.request({service:"ce",region:"us-east-1",method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"AWSInsightsIndexService.GetCostAndUsage"},body:JSON.stringify({TimePeriod:{Start:e.start,End:e.end},Granularity:"DAILY",Metrics:["UnblendedCost"]})}))?.ResultsByTime??[]).map((i)=>Number.parseFloat(i.Total?.UnblendedCost?.Amount??"0"))}}class Sa{client;region="us-east-1";constructor(){this.client=new n}async getDomainDetail(e){let t=JSON.stringify({DomainName:e.DomainName}),r=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.GetDomainDetail"},body:t});return this.parseDomainDetail(r)}async updateDomainNameservers(e){let t=JSON.stringify({DomainName:e.DomainName,Nameservers:e.Nameservers.map((i)=>({Name:i.Name,...i.GlueIps&&{GlueIps:i.GlueIps}}))});return{OperationId:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.UpdateDomainNameservers"},body:t})).OperationId||""}}async listDomains(e){let t={};if(e?.Marker)t.Marker=e.Marker;if(e?.MaxItems)t.MaxItems=e.MaxItems;if(e?.SortCondition)t.SortCondition=e.SortCondition;let r=JSON.stringify(t),i=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.ListDomains"},body:r});return{Domains:i.Domains||[],NextPageMarker:i.NextPageMarker}}async checkDomainAvailability(e){let t=JSON.stringify({DomainName:e.DomainName});return{Availability:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.CheckDomainAvailability"},body:t})).Availability||"DONT_KNOW"}}async getDomainPrice(e){let t=e.DomainName.split(".").slice(1).join("."),r=JSON.stringify({Tld:t}),s=(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.ListPrices"},body:r})).Prices?.[0]||{};return{RegistrationPrice:s.RegistrationPrice?{Price:s.RegistrationPrice.Price,Currency:s.RegistrationPrice.Currency}:void 0,RenewalPrice:s.RenewalPrice?{Price:s.RenewalPrice.Price,Currency:s.RenewalPrice.Currency}:void 0,TransferPrice:s.TransferPrice?{Price:s.TransferPrice.Price,Currency:s.TransferPrice.Currency}:void 0}}async registerDomain(e){let t=JSON.stringify({DomainName:e.DomainName,DurationInYears:e.DurationInYears,AutoRenew:e.AutoRenew??!0,AdminContact:e.AdminContact,RegistrantContact:e.RegistrantContact,TechContact:e.TechContact,PrivacyProtectAdminContact:e.PrivacyProtectAdminContact??!0,PrivacyProtectRegistrantContact:e.PrivacyProtectRegistrantContact??!0,PrivacyProtectTechContact:e.PrivacyProtectTechContact??!0});return{OperationId:(await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.RegisterDomain"},body:t})).OperationId||""}}async getOperationDetail(e){let t=JSON.stringify({OperationId:e.OperationId}),r=await this.client.request({service:"route53domains",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.1","x-amz-target":"Route53Domains_v20140515.GetOperationDetail"},body:t});return{OperationId:r.OperationId||"",Status:r.Status||"SUBMITTED",Message:r.Message,DomainName:r.DomainName,Type:r.Type,SubmittedDate:r.SubmittedDate}}parseDomainDetail(e){return{DomainName:e.DomainName||"",Nameservers:e.Nameservers?.map((t)=>({Name:t.Name,GlueIps:t.GlueIps})),AutoRenew:e.AutoRenew,AdminContact:e.AdminContact,RegistrantContact:e.RegistrantContact,TechContact:e.TechContact,AdminPrivacy:e.AdminPrivacy,RegistrantPrivacy:e.RegistrantPrivacy,TechPrivacy:e.TechPrivacy,RegistrarName:e.RegistrarName,WhoIsServer:e.WhoIsServer,RegistrarUrl:e.RegistrarUrl,AbuseContactEmail:e.AbuseContactEmail,AbuseContactPhone:e.AbuseContactPhone,RegistryDomainId:e.RegistryDomainId,CreationDate:e.CreationDate,UpdatedDate:e.UpdatedDate,ExpirationDate:e.ExpirationDate,Reseller:e.Reseller,DnsSec:e.DnsSec,StatusList:e.StatusList}}}class Ke{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async describeServices(e){let t={cluster:e.cluster,services:e.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(t)})}async listServices(e,t={}){let r={cluster:e,...t};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(e,t,r={}){let i={cluster:e,...r};if(t)i.serviceName=t;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(i)})}async describeTasks(e,t){let r={cluster:e,tasks:t};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(e){let t={cluster:e.cluster,service:e.service};if(e.forceNewDeployment!==void 0)t.forceNewDeployment=e.forceNewDeployment;if(e.desiredCount!==void 0)t.desiredCount=e.desiredCount;if(e.taskDefinition)t.taskDefinition=e.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(t)})}async createService(e){let t={cluster:e.cluster,serviceName:e.serviceName,taskDefinition:e.taskDefinition,desiredCount:e.desiredCount};if(e.launchType)t.launchType=e.launchType;if(e.networkConfiguration)t.networkConfiguration=e.networkConfiguration;if(e.loadBalancers)t.loadBalancers=e.loadBalancers;if(e.healthCheckGracePeriodSeconds!==void 0)t.healthCheckGracePeriodSeconds=e.healthCheckGracePeriodSeconds;if(e.deploymentConfiguration)t.deploymentConfiguration=e.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(t)})}async deleteService(e){let t={cluster:e.cluster,service:e.service};if(e.force!==void 0)t.force=e.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(t)})}async listClusters(e={}){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(e)})}async describeClusters(e){let t={clusters:e,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(t)})}async stopTask(e){let t={cluster:e.cluster,task:e.task};if(e.reason)t.reason=e.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(t)})}async runTask(e){let t={cluster:e.cluster,taskDefinition:e.taskDefinition};if(e.count!==void 0)t.count=e.count;if(e.launchType)t.launchType=e.launchType;if(e.networkConfiguration)t.networkConfiguration=e.networkConfiguration;if(e.overrides)t.overrides=e.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(t)})}async registerTaskDefinition(e){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(e)})}async deregisterTaskDefinition(e){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:e})})}async describeTaskDefinition(e){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:e,include:["TAGS"]})})}async listTaskDefinitionFamilies(e){let t={};if(e?.familyPrefix)t.familyPrefix=e.familyPrefix;if(e?.status)t.status=e.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(t)})}async waitForServiceStable(e,t,r=40,i=15000){for(let s=0;s<r;s++){let c=(await this.describeServices({cluster:e,services:[t]})).services?.[0];if(c){let u=c.deployments?.find((g)=>g.status==="PRIMARY");if(u&&u.runningCount===u.desiredCount&&c.deployments?.length===1)return!0}await new Promise((u)=>setTimeout(u,i))}return!1}async forceNewDeployment(e,t){return this.updateService({cluster:e,service:t,forceNewDeployment:!0})}async scaleService(e,t,r){return this.updateService({cluster:e,service:t,desiredCount:r})}}class ue{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async getCallerIdentity(){let e=await this.client.request({service:"sts",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"Action=GetCallerIdentity&Version=2011-06-15"});if(typeof e==="string"){let r=e.match(/<Account>(\d+)<\/Account>/),i=e.match(/<UserId>([^<]+)<\/UserId>/),s=e.match(/<Arn>([^<]+)<\/Arn>/);return{Account:r?.[1],UserId:i?.[1],Arn:s?.[1]}}let t=e?.GetCallerIdentityResponse?.GetCallerIdentityResult||e?.GetCallerIdentityResult;if(t)return{Account:String(t.Account),UserId:t.UserId,Arn:t.Arn};if(e?.Account)return{Account:String(e.Account),UserId:e.UserId,Arn:e.Arn};return{Account:void 0,UserId:void 0,Arn:void 0}}}class V{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async createSecret(e){let t={Name:e.Name};if(e.Description)t.Description=e.Description;if(e.KmsKeyId)t.KmsKeyId=e.KmsKeyId;if(e.SecretBinary)t.SecretBinary=e.SecretBinary;if(e.SecretString)t.SecretString=e.SecretString;if(e.Tags&&e.Tags.length>0)t.Tags=e.Tags;if(e.AddReplicaRegions&&e.AddReplicaRegions.length>0)t.AddReplicaRegions=e.AddReplicaRegions;if(e.ForceOverwriteReplicaSecret!==void 0)t.ForceOverwriteReplicaSecret=e.ForceOverwriteReplicaSecret;t.ClientRequestToken=e.ClientRequestToken||crypto.randomUUID();let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.CreateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId,ReplicationStatus:r.ReplicationStatus}}async updateSecret(e){let t={SecretId:e.SecretId};if(e.Description)t.Description=e.Description;if(e.KmsKeyId)t.KmsKeyId=e.KmsKeyId;if(e.SecretBinary)t.SecretBinary=e.SecretBinary;if(e.SecretString)t.SecretString=e.SecretString;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.UpdateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId}}async putSecretValue(e){let t={SecretId:e.SecretId};if(e.SecretBinary)t.SecretBinary=e.SecretBinary;if(e.SecretString)t.SecretString=e.SecretString;if(e.VersionStages&&e.VersionStages.length>0)t.VersionStages=e.VersionStages;if(e.ClientRequestToken)t.ClientRequestToken=e.ClientRequestToken;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.PutSecretValue","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId,VersionStages:r.VersionStages}}async getSecretValue(e){let t={SecretId:e.SecretId};if(e.VersionId)t.VersionId=e.VersionId;if(e.VersionStage)t.VersionStage=e.VersionStage;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.GetSecretValue","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId,SecretBinary:r.SecretBinary,SecretString:r.SecretString,VersionStages:r.VersionStages,CreatedDate:r.CreatedDate}}async describeSecret(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DescribeSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return this.parseSecret(r)}async listSecrets(e){let t={};if(e?.MaxResults)t.MaxResults=e.MaxResults;if(e?.NextToken)t.NextToken=e.NextToken;if(e?.Filters&&e.Filters.length>0)t.Filters=e.Filters;if(e?.SortOrder)t.SortOrder=e.SortOrder;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.ListSecrets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{SecretList:r.SecretList?.map((i)=>this.parseSecret(i)),NextToken:r.NextToken}}async deleteSecret(e){let t={SecretId:e.SecretId};if(e.RecoveryWindowInDays!==void 0)t.RecoveryWindowInDays=e.RecoveryWindowInDays;if(e.ForceDeleteWithoutRecovery!==void 0)t.ForceDeleteWithoutRecovery=e.ForceDeleteWithoutRecovery;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DeleteSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,DeletionDate:r.DeletionDate}}async restoreSecret(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.RestoreSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async rotateSecret(e){let t={SecretId:e.SecretId};if(e.ClientRequestToken)t.ClientRequestToken=e.ClientRequestToken;if(e.RotationLambdaARN)t.RotationLambdaARN=e.RotationLambdaARN;if(e.RotationRules)t.RotationRules=e.RotationRules;if(e.RotateImmediately!==void 0)t.RotateImmediately=e.RotateImmediately;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.RotateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,VersionId:r.VersionId}}async cancelRotateSecret(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.CancelRotateSecret","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async getResourcePolicy(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.GetResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name,ResourcePolicy:r.ResourcePolicy}}async putResourcePolicy(e){let t={SecretId:e.SecretId,ResourcePolicy:e.ResourcePolicy};if(e.BlockPublicPolicy!==void 0)t.BlockPublicPolicy=e.BlockPublicPolicy;let r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.PutResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async deleteResourcePolicy(e){let t={SecretId:e},r=await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.DeleteResourcePolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ARN:r.ARN,Name:r.Name}}async tagResource(e){let t={SecretId:e.SecretId,Tags:e.Tags};await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.TagResource","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async untagResource(e){let t={SecretId:e.SecretId,TagKeys:e.TagKeys};await this.client.request({service:"secretsmanager",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"secretsmanager.UntagResource","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async setString(e,t,r){try{let i=await this.putSecretValue({SecretId:e,SecretString:t});return{ARN:i.ARN,VersionId:i.VersionId}}catch(i){if(i.code==="ResourceNotFoundException"){let s=await this.createSecret({Name:e,SecretString:t,Description:r?.description,KmsKeyId:r?.kmsKeyId,Tags:r?.tags});return{ARN:s.ARN,VersionId:s.VersionId}}throw i}}async setJson(e,t,r){return this.setString(e,JSON.stringify(t),r)}async getString(e){return(await this.getSecretValue({SecretId:e})).SecretString}async getJson(e){let t=await this.getString(e);if(t)return JSON.parse(t);return}async listAll(){let e=[],t;do{let r=await this.listSecrets({NextToken:t});if(r.SecretList)e.push(...r.SecretList);t=r.NextToken}while(t);return e}parseSecret(e){return{ARN:e.ARN,Name:e.Name,Description:e.Description,KmsKeyId:e.KmsKeyId,RotationEnabled:e.RotationEnabled,RotationLambdaARN:e.RotationLambdaARN,RotationRules:e.RotationRules,LastRotatedDate:e.LastRotatedDate,LastChangedDate:e.LastChangedDate,LastAccessedDate:e.LastAccessedDate,DeletedDate:e.DeletedDate,NextRotationDate:e.NextRotationDate,Tags:e.Tags,SecretVersionsToStages:e.SecretVersionsToStages,CreatedDate:e.CreatedDate,PrimaryRegion:e.PrimaryRegion}}}class We{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}buildFormBody(e){return Object.entries(e).filter(([,r])=>r!==void 0).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(i)}`).join("&")}async createTopic(e){let t={Action:"CreateTopic",Version:"2010-03-31",Name:e.Name};if(e.DisplayName)t["Attributes.entry.1.key"]="DisplayName",t["Attributes.entry.1.value"]=e.DisplayName;if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});if(e.Attributes){let i=e.DisplayName?2:1;Object.entries(e.Attributes).forEach(([s,o])=>{t[`Attributes.entry.${i}.key`]=s,t[`Attributes.entry.${i}.value`]=o,i++})}let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)});return{TopicArn:r?.CreateTopicResponse?.CreateTopicResult?.TopicArn||r?.TopicArn}}async deleteTopic(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"DeleteTopic",Version:"2010-03-31",TopicArn:e})})}async listTopics(e){let t={Action:"ListTopics",Version:"2010-03-31"};if(e)t.NextToken=e;let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)}),i=r?.ListTopicsResponse?.ListTopicsResult||r?.ListTopicsResult,s=i?.Topics?.member;return{Topics:Array.isArray(s)?s:s?[s]:[],NextToken:i?.NextToken}}async getTopicAttributes(e){let r=(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetTopicAttributes",Version:"2010-03-31",TopicArn:e})}))?.GetTopicAttributesResponse?.GetTopicAttributesResult?.Attributes?.entry,i={TopicArn:e};if(Array.isArray(r))r.forEach((s)=>{i[s.key]=s.value});return i}async setTopicAttributes(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"SetTopicAttributes",Version:"2010-03-31",TopicArn:e.TopicArn,AttributeName:e.AttributeName,AttributeValue:e.AttributeValue})})}async subscribe(e){let t={Action:"Subscribe",Version:"2010-03-31",TopicArn:e.TopicArn,Protocol:e.Protocol,Endpoint:e.Endpoint};if(e.ReturnSubscriptionArn)t.ReturnSubscriptionArn="true";if(e.Attributes){let i=1;Object.entries(e.Attributes).forEach(([s,o])=>{t[`Attributes.entry.${i}.key`]=s,t[`Attributes.entry.${i}.value`]=o,i++})}let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)});return{SubscriptionArn:r?.SubscribeResponse?.SubscribeResult?.SubscriptionArn||r?.SubscriptionArn}}async unsubscribe(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"Unsubscribe",Version:"2010-03-31",SubscriptionArn:e})})}async listSubscriptionsByTopic(e,t){let r={Action:"ListSubscriptionsByTopic",Version:"2010-03-31",TopicArn:e};if(t)r.NextToken=t;let i=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(r)}),s=i?.ListSubscriptionsByTopicResponse?.ListSubscriptionsByTopicResult?.Subscriptions?.member;return{Subscriptions:Array.isArray(s)?s:s?[s]:[],NextToken:i?.ListSubscriptionsByTopicResponse?.ListSubscriptionsByTopicResult?.NextToken}}async publish(e){let t={Action:"Publish",Version:"2010-03-31",Message:e.Message};if(e.TopicArn)t.TopicArn=e.TopicArn;if(e.TargetArn)t.TargetArn=e.TargetArn;if(e.PhoneNumber)t.PhoneNumber=e.PhoneNumber;if(e.Subject)t.Subject=e.Subject;if(e.MessageStructure)t.MessageStructure=e.MessageStructure;if(e.MessageAttributes){let i=1;Object.entries(e.MessageAttributes).forEach(([s,o])=>{if(t[`MessageAttributes.entry.${i}.Name`]=s,t[`MessageAttributes.entry.${i}.Value.DataType`]=o.DataType,o.StringValue)t[`MessageAttributes.entry.${i}.Value.StringValue`]=o.StringValue;if(o.BinaryValue)t[`MessageAttributes.entry.${i}.Value.BinaryValue`]=o.BinaryValue;i++})}let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)});return{MessageId:r?.PublishResponse?.PublishResult?.MessageId||r?.MessageId}}async publishSMS(e,t,r){let i={};if(r)i["AWS.SNS.SMS.SenderID"]={DataType:"String",StringValue:r};return this.publish({PhoneNumber:e,Message:t,MessageAttributes:Object.keys(i).length>0?i:void 0})}async subscribeEmail(e,t){return this.subscribe({TopicArn:e,Protocol:"email",Endpoint:t})}async subscribeLambda(e,t){return this.subscribe({TopicArn:e,Protocol:"lambda",Endpoint:t})}async subscribeSqs(e,t,r){let i={};if(r)i.RawMessageDelivery="true";return this.subscribe({TopicArn:e,Protocol:"sqs",Endpoint:t,Attributes:Object.keys(i).length>0?i:void 0})}async subscribeHttp(e,t,r){let i=t.startsWith("https")?"https":"http",s={};if(r)s.RawMessageDelivery="true";return this.subscribe({TopicArn:e,Protocol:i,Endpoint:t,Attributes:Object.keys(s).length>0?s:void 0})}async subscribeSms(e,t){return this.subscribe({TopicArn:e,Protocol:"sms",Endpoint:t})}async topicExists(e){try{return await this.getTopicAttributes(e),!0}catch(t){if(t.code==="NotFound"||t.statusCode===404)return!1;throw t}}async getSMSAttributes(){let t=(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetSMSAttributes",Version:"2010-03-31"})}))?.GetSMSAttributesResponse?.GetSMSAttributesResult?.attributes?.entry,r={};if(Array.isArray(t))t.forEach((i)=>{r[i.key]=i.value});else if(t)r[t.key]=t.value;return r}async setSMSAttributes(e){let t={Action:"SetSMSAttributes",Version:"2010-03-31"},r=1;Object.entries(e).forEach(([i,s])=>{if(s!==void 0)t[`attributes.entry.${r}.key`]=i,t[`attributes.entry.${r}.value`]=s,r++}),await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)})}async checkIfPhoneNumberIsOptedOut(e){return(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"CheckIfPhoneNumberIsOptedOut",Version:"2010-03-31",phoneNumber:e})}))?.CheckIfPhoneNumberIsOptedOutResponse?.CheckIfPhoneNumberIsOptedOutResult?.isOptedOut==="true"}async listPhoneNumbersOptedOut(e){let t={Action:"ListPhoneNumbersOptedOut",Version:"2010-03-31"};if(e)t.nextToken=e;let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)}),i=r?.ListPhoneNumbersOptedOutResponse?.ListPhoneNumbersOptedOutResult?.phoneNumbers?.member;return{phoneNumbers:Array.isArray(i)?i:i?[i]:[],nextToken:r?.ListPhoneNumbersOptedOutResponse?.ListPhoneNumbersOptedOutResult?.nextToken}}async optInPhoneNumber(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"OptInPhoneNumber",Version:"2010-03-31",phoneNumber:e})})}async listSMSSandboxPhoneNumbers(e){let t={Action:"ListSMSSandboxPhoneNumbers",Version:"2010-03-31"};if(e)t.NextToken=e;let r=await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody(t)}),i=r?.ListSMSSandboxPhoneNumbersResponse?.ListSMSSandboxPhoneNumbersResult?.PhoneNumbers?.member;return{PhoneNumbers:Array.isArray(i)?i:i?[i]:[],NextToken:r?.ListSMSSandboxPhoneNumbersResponse?.ListSMSSandboxPhoneNumbersResult?.NextToken}}async createSMSSandboxPhoneNumber(e,t){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"CreateSMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:e,LanguageCode:t||"en-US"})})}async verifySMSSandboxPhoneNumber(e,t){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"VerifySMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:e,OneTimePassword:t})})}async deleteSMSSandboxPhoneNumber(e){await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"DeleteSMSSandboxPhoneNumber",Version:"2010-03-31",PhoneNumber:e})})}async getSMSSandboxAccountStatus(){return{IsInSandbox:(await this.client.request({service:"sns",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody({Action:"GetSMSSandboxAccountStatus",Version:"2010-03-31"})}))?.GetSMSSandboxAccountStatusResponse?.GetSMSSandboxAccountStatusResult?.IsInSandbox==="true"}}}class re{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async createQueue(e){let r={Action:"CreateQueue",QueueName:e.fifo&&!e.queueName.endsWith(".fifo")?`${e.queueName}.fifo`:e.queueName,Version:"2012-11-05"},i=1;if(e.visibilityTimeout!==void 0)r[`Attribute.${i}.Name`]="VisibilityTimeout",r[`Attribute.${i}.Value`]=e.visibilityTimeout.toString(),i++;if(e.messageRetentionPeriod!==void 0)r[`Attribute.${i}.Name`]="MessageRetentionPeriod",r[`Attribute.${i}.Value`]=e.messageRetentionPeriod.toString(),i++;if(e.delaySeconds!==void 0)r[`Attribute.${i}.Name`]="DelaySeconds",r[`Attribute.${i}.Value`]=e.delaySeconds.toString(),i++;if(e.maxMessageSize!==void 0)r[`Attribute.${i}.Name`]="MaximumMessageSize",r[`Attribute.${i}.Value`]=e.maxMessageSize.toString(),i++;if(e.receiveMessageWaitTime!==void 0)r[`Attribute.${i}.Name`]="ReceiveMessageWaitTimeSeconds",r[`Attribute.${i}.Value`]=e.receiveMessageWaitTime.toString(),i++;if(e.fifo){if(r[`Attribute.${i}.Name`]="FifoQueue",r[`Attribute.${i}.Value`]="true",i++,e.contentBasedDeduplication)r[`Attribute.${i}.Name`]="ContentBasedDeduplication",r[`Attribute.${i}.Value`]="true",i++}if(e.deadLetterTargetArn&&e.maxReceiveCount)r[`Attribute.${i}.Name`]="RedrivePolicy",r[`Attribute.${i}.Value`]=JSON.stringify({deadLetterTargetArn:e.deadLetterTargetArn,maxReceiveCount:e.maxReceiveCount}),i++;if(e.tags&&Object.keys(e.tags).length>0){let o=1;for(let[c,u]of Object.entries(e.tags))r[`Tag.${o}.Key`]=c,r[`Tag.${o}.Value`]=u,o++}let s=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()});return{QueueUrl:s.QueueUrl||s.CreateQueueResult?.QueueUrl}}async listQueues(e){let t={Action:"ListQueues",Version:"2012-11-05"};if(e)t.QueueNamePrefix=e;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()}),i=[];if(r.QueueUrl)i.push(r.QueueUrl);else if(r.ListQueuesResult?.QueueUrl)if(Array.isArray(r.ListQueuesResult.QueueUrl))i.push(...r.ListQueuesResult.QueueUrl);else i.push(r.ListQueuesResult.QueueUrl);return{QueueUrls:i}}async getQueueAttributes(e){let t={Action:"GetQueueAttributes",QueueUrl:e,Version:"2012-11-05","AttributeName.1":"All"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{Attributes:r.Attributes||r.GetQueueAttributesResult?.Attributes||{}}}async getQueueUrl(e){let t={Action:"GetQueueUrl",QueueName:e,Version:"2012-11-05"},r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{QueueUrl:r.QueueUrl||r.GetQueueUrlResult?.QueueUrl}}async deleteQueue(e){let t={Action:"DeleteQueue",QueueUrl:e,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()})}async purgeQueue(e){let t={Action:"PurgeQueue",QueueUrl:e,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()})}async sendMessage(e){let t={Action:"SendMessage",QueueUrl:e.queueUrl,MessageBody:e.messageBody,Version:"2012-11-05"};if(e.delaySeconds!==void 0)t.DelaySeconds=e.delaySeconds;if(e.messageGroupId)t.MessageGroupId=e.messageGroupId;if(e.messageDeduplicationId)t.MessageDeduplicationId=e.messageDeduplicationId;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{MessageId:r.MessageId||r.SendMessageResult?.MessageId}}async receiveMessages(e){let t={Action:"ReceiveMessage",QueueUrl:e.queueUrl,Version:"2012-11-05"};if(e.maxMessages!==void 0)t.MaxNumberOfMessages=e.maxMessages;if(e.visibilityTimeout!==void 0)t.VisibilityTimeout=e.visibilityTimeout;if(e.waitTimeSeconds!==void 0)t.WaitTimeSeconds=e.waitTimeSeconds;let r=await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()}),i=[],s=r.Message||r.ReceiveMessageResult?.Message;if(s)if(Array.isArray(s))i.push(...s.map((o)=>({MessageId:o.MessageId,ReceiptHandle:o.ReceiptHandle,Body:o.Body})));else i.push({MessageId:s.MessageId,ReceiptHandle:s.ReceiptHandle,Body:s.Body});return{Messages:i}}async deleteMessage(e,t){let r={Action:"DeleteMessage",QueueUrl:e,ReceiptHandle:t,Version:"2012-11-05"};await this.client.request({service:"sqs",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}}import{deflateRawSync as Te}from"zlib";function B(e,t){let r=typeof t==="string"?Buffer.from(t,"utf-8"):t,i=Te(r),s=Ie(r),o=new Date,c=(o.getHours()<<11|o.getMinutes()<<5|o.getSeconds()>>1)&65535,u=(o.getFullYear()-1980<<9|o.getMonth()+1<<5|o.getDate())&65535,g=Buffer.from(e,"utf-8"),m=Buffer.alloc(30+g.length);m.writeUInt32LE(67324752,0),m.writeUInt16LE(20,4),m.writeUInt16LE(0,6),m.writeUInt16LE(8,8),m.writeUInt16LE(c,10),m.writeUInt16LE(u,12),m.writeUInt32LE(s,14),m.writeUInt32LE(i.length,18),m.writeUInt32LE(r.length,22),m.writeUInt16LE(g.length,26),m.writeUInt16LE(0,28),g.copy(m,30);let d=Buffer.alloc(46+g.length);d.writeUInt32LE(33639248,0),d.writeUInt16LE(20,4),d.writeUInt16LE(20,6),d.writeUInt16LE(0,8),d.writeUInt16LE(8,10),d.writeUInt16LE(c,12),d.writeUInt16LE(u,14),d.writeUInt32LE(s,16),d.writeUInt32LE(i.length,20),d.writeUInt32LE(r.length,24),d.writeUInt16LE(g.length,28),d.writeUInt16LE(0,30),d.writeUInt16LE(0,32),d.writeUInt16LE(0,34),d.writeUInt16LE(0,36),d.writeUInt32LE(0,38),d.writeUInt32LE(0,42),g.copy(d,46);let l=m.length+i.length,p=d.length,h=Buffer.alloc(22);return h.writeUInt32LE(101010256,0),h.writeUInt16LE(0,4),h.writeUInt16LE(0,6),h.writeUInt16LE(1,8),h.writeUInt16LE(1,10),h.writeUInt32LE(p,12),h.writeUInt32LE(l,16),h.writeUInt16LE(0,20),Buffer.concat([m,i,d,h])}function Ie(e){let t=[];for(let i=0;i<256;i++){let s=i;for(let o=0;o<8;o++)s=s&1?3988292384^s>>>1:s>>>1;t[i]=s}let r=4294967295;for(let i=0;i<e.length;i++)r=t[(r^e[i])&255]^r>>>8;return(r^4294967295)>>>0}class C{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async createFunction(e){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(e)})}async getFunction(e){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(e)}`,headers:{"Content-Type":"application/json"}})}async updateFunctionCode(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(t)}/code`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateFunctionCodeInline(e,t,r="index.js"){let i=B(r,t);return this.updateFunctionCode({FunctionName:e,ZipFile:i.toString("base64")})}async updateFunctionConfiguration(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(t)}/configuration`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async deleteFunction(e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(e)}`,headers:{"Content-Type":"application/json"}})}async invoke(e){let{FunctionName:t,InvocationType:r="RequestResponse",Payload:i,LogType:s}=e,o={"Content-Type":"application/json","X-Amz-Invocation-Type":r};if(s)o["X-Amz-Log-Type"]=s;let c=i?typeof i==="string"?i:JSON.stringify(i):void 0,u=await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/invocations`,headers:o,body:c,returnHeaders:!0});return{StatusCode:u.statusCode||200,FunctionError:u.headers?.["x-amz-function-error"],LogResult:u.headers?.["x-amz-log-result"],Payload:typeof u.body==="string"?u.body:JSON.stringify(u.body),ExecutedVersion:u.headers?.["x-amz-executed-version"]}}async listFunctions(e){let t={};if(e?.MaxItems)t.MaxItems=String(e.MaxItems);if(e?.Marker)t.Marker=e.Marker;if(e?.FunctionVersion)t.FunctionVersion=e.FunctionVersion;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:"/2015-03-31/functions",queryParams:Object.keys(t).length>0?t:void 0,headers:{"Content-Type":"application/json"}})}async addPermission(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async removePermission(e,t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2015-03-31/functions/${encodeURIComponent(e)}/policy/${encodeURIComponent(t)}`,headers:{"Content-Type":"application/json"}})}async publishVersion(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async createAlias(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2015-03-31/functions/${encodeURIComponent(t)}/aliases`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async updateAlias(e){let{FunctionName:t,Name:r,...i}=e;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2015-03-31/functions/${encodeURIComponent(t)}/aliases/${encodeURIComponent(r)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}async getAlias(e,t){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2015-03-31/functions/${encodeURIComponent(e)}/aliases/${encodeURIComponent(t)}`})}catch(r){if(/ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async getProvisionedConcurrencyConfig(e,t){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-09-30/functions/${encodeURIComponent(e)}/provisioned-concurrency`,queryParams:{Qualifier:t}})}catch(r){if(/ProvisionedConcurrencyConfigNotFound|ResourceNotFound/i.test(String(r?.message)))return null;throw r}}async putProvisionedConcurrencyConfig(e){let{FunctionName:t,Qualifier:r,ProvisionedConcurrentExecutions:i}=e;return this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-09-30/functions/${encodeURIComponent(t)}/provisioned-concurrency`,queryParams:{Qualifier:r},headers:{"Content-Type":"application/json"},body:JSON.stringify({ProvisionedConcurrentExecutions:i})})}async getFunctionConcurrency(e){try{return(await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2019-10-31/functions/${encodeURIComponent(e)}/concurrency`}))?.ReservedConcurrentExecutions??null}catch(t){if(/ResourceNotFound|ProvisionedConcurrencyConfigNotFound/i.test(String(t?.message)))return null;throw t}}async putFunctionConcurrency(e,t){await this.client.request({service:"lambda",region:this.region,method:"PUT",path:`/2019-10-31/functions/${encodeURIComponent(e)}/concurrency`,headers:{"Content-Type":"application/json"},body:JSON.stringify({ReservedConcurrentExecutions:t})})}async deleteFunctionConcurrency(e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-10-31/functions/${encodeURIComponent(e)}/concurrency`})}async deleteProvisionedConcurrencyConfig(e,t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2019-09-30/functions/${encodeURIComponent(e)}/provisioned-concurrency`,queryParams:{Qualifier:t}})}async waitForFunctionActive(e,t=60){let r=Date.now(),i=t*1000;while(Date.now()-r<i)try{let s=await this.getFunction(e),o=s.Configuration?.State;if(o==="Active")return s.Configuration;if(o==="Failed")throw Error(`Function ${e} failed: ${s.Configuration?.StateReason}`);await new Promise((c)=>setTimeout(c,2000))}catch(s){if(s.code==="ResourceNotFoundException"){await new Promise((o)=>setTimeout(o,2000));continue}throw s}throw Error(`Timeout waiting for function ${e} to become active`)}async functionExists(e){try{return await this.getFunction(e),!0}catch(t){if(t.code==="ResourceNotFoundException"||t.statusCode===404)return!1;throw t}}async createFunctionUrl(e){let{FunctionName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2021-10-31/functions/${encodeURIComponent(t)}/url`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async getFunctionUrl(e){try{return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2021-10-31/functions/${encodeURIComponent(e)}/url`,headers:{"Content-Type":"application/json"}})}catch(t){if(t.statusCode===404)return null;throw t}}async deleteFunctionUrl(e){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2021-10-31/functions/${encodeURIComponent(e)}/url`,headers:{"Content-Type":"application/json"}})}async createFunctionWithCode(e){let{Code:t,Filename:r="index.js",...i}=e,s=B(r,t);return this.createFunction({...i,Code:{ZipFile:s.toString("base64")}})}async addFunctionUrlPermission(e){return this.addPermission({FunctionName:e,StatementId:"FunctionURLAllowPublicAccess",Action:"lambda:InvokeFunctionUrl",Principal:"*",FunctionUrlAuthType:"NONE"})}async publishLayerVersion(e){let{LayerName:t,...r}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}async listLayerVersions(e,t){let r={};if(t?.CompatibleRuntime)r.CompatibleRuntime=t.CompatibleRuntime;if(t?.CompatibleArchitecture)r.CompatibleArchitecture=t.CompatibleArchitecture;if(t?.MaxItems)r.MaxItems=String(t.MaxItems);if(t?.Marker)r.Marker=t.Marker;return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions`,queryParams:Object.keys(r).length>0?r:void 0,headers:{"Content-Type":"application/json"}})}async getLayerVersion(e,t){return await this.client.request({service:"lambda",region:this.region,method:"GET",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions/${t}`,headers:{"Content-Type":"application/json"}})}async addLayerVersionPermission(e){let{LayerName:t,VersionNumber:r,...i}=e;return await this.client.request({service:"lambda",region:this.region,method:"POST",path:`/2018-10-31/layers/${encodeURIComponent(t)}/versions/${r}/policy`,headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})}async deleteLayerVersion(e,t){await this.client.request({service:"lambda",region:this.region,method:"DELETE",path:`/2018-10-31/layers/${encodeURIComponent(e)}/versions/${t}`,headers:{"Content-Type":"application/json"}})}}class pe{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n(void 0,{profile:t})}async createLogGroup(e,t){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:e,...t?{tags:t}:{}})})}async putRetentionPolicy(e,t){if(![1,3,5,7,14,30,60,90,120,150,180,365,400,545,731,1096,1827,2192,2557,2922,3288,3653].includes(t))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:e,retentionInDays:t})})}async describeLogStreams(e){let t={logGroupName:e.logGroupName};if(e.logStreamNamePrefix)t.logStreamNamePrefix=e.logStreamNamePrefix;if(e.orderBy)t.orderBy=e.orderBy;if(e.descending!==void 0)t.descending=e.descending;if(e.limit)t.limit=e.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(t)})}async getLogEvents(e){let t={logGroupName:e.logGroupName,logStreamName:e.logStreamName};if(e.startTime)t.startTime=e.startTime;if(e.endTime)t.endTime=e.endTime;if(e.limit)t.limit=e.limit;if(e.startFromHead!==void 0)t.startFromHead=e.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(t)})}async describeLogGroups(e){let t={};if(e?.logGroupNamePrefix)t.logGroupNamePrefix=e.logGroupNamePrefix;if(e?.limit)t.limit=e.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(t)})}async deleteLogGroup(e){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:e})})}async filterLogEvents(e){let t={logGroupName:e.logGroupName};if(e.logStreamNames)t.logStreamNames=e.logStreamNames;if(e.startTime)t.startTime=e.startTime;if(e.endTime)t.endTime=e.endTime;if(e.filterPattern)t.filterPattern=e.filterPattern;if(e.limit)t.limit=e.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(t)})}}class rn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createInstance(e){let t={InstanceAlias:e.InstanceAlias,IdentityManagementType:e.IdentityManagementType||"CONNECT_MANAGED",InboundCallsEnabled:e.InboundCallsEnabled??!0,OutboundCallsEnabled:e.OutboundCallsEnabled??!0};if(e.DirectoryId)t.DirectoryId=e.DirectoryId;if(e.ClientToken)t.ClientToken=e.ClientToken;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:"/instance",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async deleteInstance(e){await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/instance/${e}`})}async describeInstance(e){let t=await this.client.request({service:"connect",region:this.region,method:"GET",path:`/instance/${e}`});return t.Instance||t}async listInstances(e){let t={};if(e?.MaxResults)t.maxResults=String(e.MaxResults);if(e?.NextToken)t.nextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"GET",path:"/instance",queryParams:t})}async searchAvailablePhoneNumbers(e){let t={TargetArn:e.TargetArn,PhoneNumberCountryCode:e.PhoneNumberCountryCode,PhoneNumberType:e.PhoneNumberType};if(e.PhoneNumberPrefix)t.PhoneNumberPrefix=e.PhoneNumberPrefix;if(e.MaxResults)t.MaxResults=e.MaxResults;if(e.NextToken)t.NextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/search-available",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async claimPhoneNumber(e){let t={TargetArn:e.TargetArn,PhoneNumber:e.PhoneNumber};if(e.PhoneNumberDescription)t.PhoneNumberDescription=e.PhoneNumberDescription;if(e.Tags)t.Tags=e.Tags;if(e.ClientToken)t.ClientToken=e.ClientToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/claim",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async releasePhoneNumber(e,t){let r={};if(t)r.clientToken=t;await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/phone-number/${e}`,queryParams:r})}async listPhoneNumbers(e){let t={};if(e.TargetArn)t.TargetArn=e.TargetArn;if(e.InstanceId)t.InstanceId=e.InstanceId;if(e.PhoneNumberTypes)t.PhoneNumberTypes=e.PhoneNumberTypes;if(e.PhoneNumberCountryCodes)t.PhoneNumberCountryCodes=e.PhoneNumberCountryCodes;if(e.MaxResults)t.MaxResults=e.MaxResults;if(e.NextToken)t.NextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"POST",path:"/phone-number/list",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async createContactFlow(e){let t={Name:e.Name,Type:e.Type,Content:e.Content};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact-flows/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async updateContactFlowContent(e){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact-flows/${e.InstanceId}/${e.ContactFlowId}/content`,headers:{"Content-Type":"application/json"},body:JSON.stringify({Content:e.Content})})}async listContactFlows(e){let t={};if(e.ContactFlowTypes)t.contactFlowTypes=e.ContactFlowTypes.join(",");if(e.MaxResults)t.maxResults=String(e.MaxResults);if(e.NextToken)t.nextToken=e.NextToken;return await this.client.request({service:"connect",region:this.region,method:"GET",path:`/contact-flows-summary/${e.InstanceId}`,queryParams:t})}async createQueue(e){let t={Name:e.Name,HoursOfOperationId:e.HoursOfOperationId};if(e.Description)t.Description=e.Description;if(e.MaxContacts)t.MaxContacts=e.MaxContacts;if(e.OutboundCallerConfig)t.OutboundCallerConfig=e.OutboundCallerConfig;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/queues/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async createHoursOfOperation(e){let t={Name:e.Name,TimeZone:e.TimeZone,Config:e.Config};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/hours-of-operations/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async associatePhoneNumberContactFlow(e){await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/phone-number/${e.PhoneNumberId}/contact-flow`,headers:{"Content-Type":"application/json"},body:JSON.stringify({InstanceId:e.InstanceId,ContactFlowId:e.ContactFlowId})})}async createRoutingProfile(e){let t={Name:e.Name,DefaultOutboundQueueId:e.DefaultOutboundQueueId,MediaConcurrencies:e.MediaConcurrencies};if(e.Description)t.Description=e.Description;if(e.QueueConfigs)t.QueueConfigs=e.QueueConfigs;if(e.Tags)t.Tags=e.Tags;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/routing-profiles/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async instanceExists(e){try{return(await this.listInstances({MaxResults:100})).InstanceSummaryList?.some((r)=>r.InstanceAlias===e)||!1}catch{return!1}}async startOutboundVoiceContact(e){let t={ContactFlowId:e.ContactFlowId,DestinationPhoneNumber:e.DestinationPhoneNumber};if(e.SourcePhoneNumber)t.SourcePhoneNumber=e.SourcePhoneNumber;if(e.QueueId)t.QueueId=e.QueueId;if(e.Attributes)t.Attributes=e.Attributes;if(e.AnswerMachineDetectionConfig)t.AnswerMachineDetectionConfig=e.AnswerMachineDetectionConfig;if(e.CampaignId)t.CampaignId=e.CampaignId;if(e.TrafficType)t.TrafficType=e.TrafficType;if(e.ClientToken)t.ClientToken=e.ClientToken;return await this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/outbound-voice/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async makeCall(e){return this.startOutboundVoiceContact({InstanceId:e.instanceId,ContactFlowId:e.contactFlowId,DestinationPhoneNumber:e.to,SourcePhoneNumber:e.from,Attributes:e.attributes})}async stopContact(e){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact/stop/${e.InstanceId}/${e.ContactId}`})}async describeContact(e){return this.client.request({service:"connect",region:this.region,method:"GET",path:`/contacts/${e.InstanceId}/${e.ContactId}`})}async updateContactAttributes(e){await this.client.request({service:"connect",region:this.region,method:"POST",path:`/contact/attributes/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify({InitialContactId:e.InitialContactId,Attributes:e.Attributes})})}async createUser(e){let t={Username:e.Username,PhoneConfig:e.PhoneConfig,SecurityProfileIds:e.SecurityProfileIds,RoutingProfileId:e.RoutingProfileId};if(e.Password)t.Password=e.Password;if(e.IdentityInfo)t.IdentityInfo=e.IdentityInfo;if(e.DirectoryUserId)t.DirectoryUserId=e.DirectoryUserId;if(e.HierarchyGroupId)t.HierarchyGroupId=e.HierarchyGroupId;if(e.Tags)t.Tags=e.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/users/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async deleteUser(e){await this.client.request({service:"connect",region:this.region,method:"DELETE",path:`/users/${e.InstanceId}/${e.UserId}`})}async listUsers(e){let t={};if(e.NextToken)t.nextToken=e.NextToken;if(e.MaxResults)t.maxResults=String(e.MaxResults);return this.client.request({service:"connect",region:this.region,method:"GET",path:`/users-summary/${e.InstanceId}`,queryParams:t})}async createPrompt(e){let t={Name:e.Name,S3Uri:e.S3Uri};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/prompts/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async listPrompts(e){let t={};if(e.NextToken)t.nextToken=e.NextToken;if(e.MaxResults)t.maxResults=String(e.MaxResults);return this.client.request({service:"connect",region:this.region,method:"GET",path:`/prompts-summary/${e.InstanceId}`,queryParams:t})}async createQuickConnect(e){let t={Name:e.Name,QuickConnectConfig:e.QuickConnectConfig};if(e.Description)t.Description=e.Description;if(e.Tags)t.Tags=e.Tags;return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/quick-connects/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async startChatContact(e){return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/chat/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async startTaskContact(e){return this.client.request({service:"connect",region:this.region,method:"PUT",path:`/contact/task/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}createOutboundIvrFlow(e){let t=e.voiceId||"Joanna";return JSON.stringify({Version:"2019-10-30",StartAction:"play-prompt",Actions:{"play-prompt":{Type:"MessageParticipant",Parameters:{Text:e.message,TextToSpeechVoice:t,TextToSpeechEngine:"neural"},Transitions:{NextAction:"disconnect",Errors:[{NextAction:"disconnect",ErrorType:"NoMatchingError"}]}},disconnect:{Type:"DisconnectParticipant",Parameters:{},Transitions:{}}}})}createInputCollectionFlow(e){let t=e.voiceId||"Joanna",r=e.inputTimeout||5,i=e.maxDigits||1;return JSON.stringify({Version:"2019-10-30",StartAction:"get-input",Actions:{"get-input":{Type:"GetParticipantInput",Parameters:{Text:e.promptMessage,TextToSpeechVoice:t,TextToSpeechEngine:"neural",InputTimeLimitSeconds:String(r),MaxDigits:i,EncryptEntry:!1},Transitions:{NextAction:e.successNextAction||"disconnect",Conditions:[],Errors:[{NextAction:"disconnect",ErrorType:"NoMatchingCondition"},{NextAction:"disconnect",ErrorType:"NoMatchingError"}]}},disconnect:{Type:"DisconnectParticipant",Parameters:{},Transitions:{}}}})}async getCurrentMetricData(e){return this.client.request({service:"connect",region:this.region,method:"POST",path:`/metrics/current/${e.InstanceId}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}class Ca{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async describeLoadBalancers(e){let t={};if(e?.LoadBalancerArns)e.LoadBalancerArns.forEach((i,s)=>{t[`LoadBalancerArns.member.${s+1}`]=i});if(e?.Names)e.Names.forEach((i,s)=>{t[`Names.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeLoadBalancers",t)});return this.normalizeResult(r,"DescribeLoadBalancersResult")}async describeTargetGroups(e){let t={};if(e?.LoadBalancerArn)t.LoadBalancerArn=e.LoadBalancerArn;if(e?.TargetGroupArns)e.TargetGroupArns.forEach((i,s)=>{t[`TargetGroupArns.member.${s+1}`]=i});if(e?.Names)e.Names.forEach((i,s)=>{t[`Names.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetGroups",t)});return this.normalizeResult(r,"DescribeTargetGroupsResult")}async describeTargetHealth(e){let t={TargetGroupArn:e.TargetGroupArn};if(e.Targets)e.Targets.forEach((i,s)=>{if(t[`Targets.member.${s+1}.Id`]=i.Id,i.Port)t[`Targets.member.${s+1}.Port`]=i.Port;if(i.AvailabilityZone)t[`Targets.member.${s+1}.AvailabilityZone`]=i.AvailabilityZone});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetHealth",t)});return this.normalizeResult(r,"DescribeTargetHealthResult")}async describeListeners(e){let t={};if(e?.LoadBalancerArn)t.LoadBalancerArn=e.LoadBalancerArn;if(e?.ListenerArns)e.ListenerArns.forEach((i,s)=>{t[`ListenerArns.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeListeners",t)});return this.normalizeResult(r,"DescribeListenersResult")}async describeRules(e){let t={};if(e?.ListenerArn)t.ListenerArn=e.ListenerArn;if(e?.RuleArns)e.RuleArns.forEach((i,s)=>{t[`RuleArns.member.${s+1}`]=i});if(e?.Marker)t.Marker=e.Marker;if(e?.PageSize)t.PageSize=e.PageSize;let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeRules",t)});return this.normalizeResult(r,"DescribeRulesResult")}async describeLoadBalancerAttributes(e){let t={LoadBalancerArn:e},r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeLoadBalancerAttributes",t)});return this.normalizeResult(r,"DescribeLoadBalancerAttributesResult")}async describeTargetGroupAttributes(e){let t={TargetGroupArn:e},r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DescribeTargetGroupAttributes",t)});return this.normalizeResult(r,"DescribeTargetGroupAttributesResult")}async createLoadBalancer(e){let t={Name:e.Name};if(e.Subnets)e.Subnets.forEach((i,s)=>{t[`Subnets.member.${s+1}`]=i});if(e.SubnetMappings)e.SubnetMappings.forEach((i,s)=>{if(t[`SubnetMappings.member.${s+1}.SubnetId`]=i.SubnetId,i.AllocationId)t[`SubnetMappings.member.${s+1}.AllocationId`]=i.AllocationId;if(i.PrivateIPv4Address)t[`SubnetMappings.member.${s+1}.PrivateIPv4Address`]=i.PrivateIPv4Address;if(i.IPv6Address)t[`SubnetMappings.member.${s+1}.IPv6Address`]=i.IPv6Address});if(e.SecurityGroups)e.SecurityGroups.forEach((i,s)=>{t[`SecurityGroups.member.${s+1}`]=i});if(e.Scheme)t.Scheme=e.Scheme;if(e.Type)t.Type=e.Type;if(e.IpAddressType)t.IpAddressType=e.IpAddressType;if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateLoadBalancer",t)});return this.normalizeResult(r,"CreateLoadBalancerResult")}async deleteLoadBalancer(e){let t={LoadBalancerArn:e};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteLoadBalancer",t)})}async createTargetGroup(e){let t={Name:e.Name};if(e.Protocol)t.Protocol=e.Protocol;if(e.ProtocolVersion)t.ProtocolVersion=e.ProtocolVersion;if(e.Port)t.Port=e.Port;if(e.VpcId)t.VpcId=e.VpcId;if(e.HealthCheckProtocol)t.HealthCheckProtocol=e.HealthCheckProtocol;if(e.HealthCheckPort)t.HealthCheckPort=e.HealthCheckPort;if(e.HealthCheckEnabled!==void 0)t.HealthCheckEnabled=e.HealthCheckEnabled;if(e.HealthCheckPath)t.HealthCheckPath=e.HealthCheckPath;if(e.HealthCheckIntervalSeconds)t.HealthCheckIntervalSeconds=e.HealthCheckIntervalSeconds;if(e.HealthCheckTimeoutSeconds)t.HealthCheckTimeoutSeconds=e.HealthCheckTimeoutSeconds;if(e.HealthyThresholdCount)t.HealthyThresholdCount=e.HealthyThresholdCount;if(e.UnhealthyThresholdCount)t.UnhealthyThresholdCount=e.UnhealthyThresholdCount;if(e.TargetType)t.TargetType=e.TargetType;if(e.IpAddressType)t.IpAddressType=e.IpAddressType;if(e.Matcher){if(e.Matcher.HttpCode)t["Matcher.HttpCode"]=e.Matcher.HttpCode;if(e.Matcher.GrpcCode)t["Matcher.GrpcCode"]=e.Matcher.GrpcCode}if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateTargetGroup",t)});return this.normalizeResult(r,"CreateTargetGroupResult")}async deleteTargetGroup(e){let t={TargetGroupArn:e};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteTargetGroup",t)})}async registerTargets(e){let t={TargetGroupArn:e.TargetGroupArn};e.Targets.forEach((r,i)=>{if(t[`Targets.member.${i+1}.Id`]=r.Id,r.Port)t[`Targets.member.${i+1}.Port`]=r.Port;if(r.AvailabilityZone)t[`Targets.member.${i+1}.AvailabilityZone`]=r.AvailabilityZone}),await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("RegisterTargets",t)})}async deregisterTargets(e){let t={TargetGroupArn:e.TargetGroupArn};e.Targets.forEach((r,i)=>{if(t[`Targets.member.${i+1}.Id`]=r.Id,r.Port)t[`Targets.member.${i+1}.Port`]=r.Port;if(r.AvailabilityZone)t[`Targets.member.${i+1}.AvailabilityZone`]=r.AvailabilityZone}),await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeregisterTargets",t)})}async createListener(e){let t={LoadBalancerArn:e.LoadBalancerArn,Port:e.Port};if(e.Protocol)t.Protocol=e.Protocol;if(e.SslPolicy)t.SslPolicy=e.SslPolicy;if(e.Certificates)e.Certificates.forEach((i,s)=>{t[`Certificates.member.${s+1}.CertificateArn`]=i.CertificateArn});if(e.DefaultActions.forEach((i,s)=>{if(t[`DefaultActions.member.${s+1}.Type`]=i.Type,i.TargetGroupArn)t[`DefaultActions.member.${s+1}.TargetGroupArn`]=i.TargetGroupArn;if(i.Order!==void 0)t[`DefaultActions.member.${s+1}.Order`]=i.Order;if(i.RedirectConfig){let o=i.RedirectConfig;if(o.Protocol)t[`DefaultActions.member.${s+1}.RedirectConfig.Protocol`]=o.Protocol;if(o.Port)t[`DefaultActions.member.${s+1}.RedirectConfig.Port`]=o.Port;if(o.Host)t[`DefaultActions.member.${s+1}.RedirectConfig.Host`]=o.Host;if(o.Path)t[`DefaultActions.member.${s+1}.RedirectConfig.Path`]=o.Path;if(o.Query)t[`DefaultActions.member.${s+1}.RedirectConfig.Query`]=o.Query;t[`DefaultActions.member.${s+1}.RedirectConfig.StatusCode`]=o.StatusCode}if(i.FixedResponseConfig){let o=i.FixedResponseConfig;if(o.MessageBody)t[`DefaultActions.member.${s+1}.FixedResponseConfig.MessageBody`]=o.MessageBody;if(t[`DefaultActions.member.${s+1}.FixedResponseConfig.StatusCode`]=o.StatusCode,o.ContentType)t[`DefaultActions.member.${s+1}.FixedResponseConfig.ContentType`]=o.ContentType}}),e.AlpnPolicy)e.AlpnPolicy.forEach((i,s)=>{t[`AlpnPolicy.member.${s+1}`]=i});if(e.Tags)e.Tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("CreateListener",t)});return this.normalizeResult(r,"CreateListenerResult")}async deleteListener(e){let t={ListenerArn:e};await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("DeleteListener",t)})}async modifyListener(e){let t={ListenerArn:e.ListenerArn};if(e.Port)t.Port=e.Port;if(e.Protocol)t.Protocol=e.Protocol;if(e.SslPolicy)t.SslPolicy=e.SslPolicy;if(e.Certificates)e.Certificates.forEach((i,s)=>{t[`Certificates.member.${s+1}.CertificateArn`]=i.CertificateArn});if(e.DefaultActions)e.DefaultActions.forEach((i,s)=>{if(i.Type)t[`DefaultActions.member.${s+1}.Type`]=i.Type;if(i.TargetGroupArn)t[`DefaultActions.member.${s+1}.TargetGroupArn`]=i.TargetGroupArn;if(i.Order!==void 0)t[`DefaultActions.member.${s+1}.Order`]=i.Order});if(e.AlpnPolicy)e.AlpnPolicy.forEach((i,s)=>{t[`AlpnPolicy.member.${s+1}`]=i});let r=await this.client.request({service:"elasticloadbalancing",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:this.buildFormBody("ModifyListener",t)});return this.normalizeResult(r,"ModifyListenerResult")}buildFormBody(e,t){let r={Action:e,Version:"2015-12-01"};for(let[i,s]of Object.entries(t))if(s!==void 0&&s!==null)r[i]=String(s);return Object.entries(r).map(([i,s])=>`${encodeURIComponent(i)}=${encodeURIComponent(s)}`).join("&")}normalizeResult(e,t){if(e&&e[t])return this.normalizeArrays(e[t]);let r=t.replace("Result","Response");if(e&&e[r]&&e[r][t])return this.normalizeArrays(e[r][t]);return this.normalizeArrays(e)}normalizeArrays(e){if(!e||typeof e!=="object")return e;if(Array.isArray(e))return e.map((r)=>this.normalizeArrays(r));let t={};for(let[r,i]of Object.entries(e)){let s=["LoadBalancers","TargetGroups","Listeners","Rules","TargetHealthDescriptions","Attributes","SecurityGroups","AvailabilityZones","Certificates","DefaultActions","Conditions","Actions","member"];if(r==="member"){if(Array.isArray(i))return i.map((o)=>this.normalizeArrays(o));return[this.normalizeArrays(i)]}if(s.includes(r))if(i&&typeof i==="object"&&"member"in i){let o=i.member;t[r]=Array.isArray(o)?o.map((c)=>this.normalizeArrays(c)):[this.normalizeArrays(o)]}else if(Array.isArray(i))t[r]=i.map((o)=>this.normalizeArrays(o));else if(i)t[r]=[this.normalizeArrays(i)];else t[r]=[];else if(typeof i==="object")t[r]=this.normalizeArrays(i);else t[r]=i}return t}}class De{client;region;endpoint;constructor(e="us-east-1",t){this.region=e,this.endpoint=t?.endpoint,this.client=new n}async request(e,t){if(this.endpoint){let r=await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${e}`},body:JSON.stringify(t)});if(!r.ok){let i=await r.text();throw Error(`DynamoDB request failed: ${r.status} ${i}`)}return r.json()}return this.client.request({service:"dynamodb",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.0","X-Amz-Target":`DynamoDB_20120810.${e}`},body:JSON.stringify(t)})}async createTable(e){return this.request("CreateTable",e)}async deleteTable(e){return this.request("DeleteTable",e)}async describeTable(e){return this.request("DescribeTable",e)}async listTables(e){return this.request("ListTables",e||{})}async putItem(e){return this.request("PutItem",e)}async getItem(e){return this.request("GetItem",e)}async updateItem(e){return this.request("UpdateItem",e)}async deleteItem(e){return this.request("DeleteItem",e)}async query(e){return this.request("Query",e)}async scan(e){return this.request("Scan",e)}async batchWriteItem(e){return this.request("BatchWriteItem",e)}async batchGetItem(e){return this.request("BatchGetItem",e)}async updateTimeToLive(e){return this.request("UpdateTimeToLive",e)}static marshal(e){let t={};for(let[r,i]of Object.entries(e))t[r]=De.marshalValue(i);return t}static marshalValue(e){if(e===null||e===void 0)return{NULL:!0};if(typeof e==="string")return{S:e};if(typeof e==="number")return{N:String(e)};if(typeof e==="boolean")return{BOOL:e};if(Array.isArray(e))return{L:e.map((t)=>De.marshalValue(t))};if(typeof e==="object")return{M:De.marshal(e)};return{S:String(e)}}static unmarshal(e){let t={};for(let[r,i]of Object.entries(e))t[r]=De.unmarshalValue(i);return t}static unmarshalValue(e){if(e.S!==void 0)return e.S;if(e.N!==void 0)return Number(e.N);if(e.BOOL!==void 0)return e.BOOL;if(e.NULL!==void 0)return null;if(e.L!==void 0)return e.L.map((t)=>De.unmarshalValue(t));if(e.M!==void 0)return De.unmarshal(e.M);if(e.SS!==void 0)return e.SS;if(e.NS!==void 0)return e.NS.map(Number);return null}}class ba{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createDomain(e){return this.client.request({service:"es",region:this.region,method:"POST",path:"/2021-01-01/opensearch/domain",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteDomain(e){return this.client.request({service:"es",region:this.region,method:"DELETE",path:`/2021-01-01/opensearch/domain/${e}`})}async describeDomain(e){return this.client.request({service:"es",region:this.region,method:"GET",path:`/2021-01-01/opensearch/domain/${e}`})}async listDomainNames(){return this.client.request({service:"es",region:this.region,method:"GET",path:"/2021-01-01/domain"})}async updateDomainConfig(e){let{DomainName:t,...r}=e;return this.client.request({service:"es",region:this.region,method:"POST",path:`/2021-01-01/opensearch/domain/${t}/config`,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})}}class nn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"transcribe",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Transcribe.${e}`},body:JSON.stringify(t)})}async startTranscriptionJob(e){return this.request("StartTranscriptionJob",e)}async getTranscriptionJob(e){return this.request("GetTranscriptionJob",e)}async listTranscriptionJobs(e){return this.request("ListTranscriptionJobs",e||{})}async deleteTranscriptionJob(e){return this.request("DeleteTranscriptionJob",e)}}class sn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async invokeModel(e){let t=typeof e.body==="string"?e.body:e.body instanceof Uint8Array?new TextDecoder().decode(e.body):JSON.stringify(e.body),r={"Content-Type":e.contentType||"application/json",Accept:e.accept||"application/json"};if(e.trace)r["X-Amzn-Bedrock-Trace"]=e.trace;if(e.guardrailIdentifier)r["X-Amzn-Bedrock-GuardrailIdentifier"]=e.guardrailIdentifier;if(e.guardrailVersion)r["X-Amzn-Bedrock-GuardrailVersion"]=e.guardrailVersion;let i=await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(e.modelId)}/invoke`,headers:r,body:t,rawResponse:!0,returnHeaders:!0});return{body:new TextEncoder().encode(i.body),contentType:i.headers?.["content-type"]||"application/json"}}async invokeModelWithResponseStream(e){let t=typeof e.body==="string"?e.body:e.body instanceof Uint8Array?new TextDecoder().decode(e.body):JSON.stringify(e.body),r={"Content-Type":e.contentType||"application/json",Accept:e.accept||"application/vnd.amazon.eventstream"};if(e.trace)r["X-Amzn-Bedrock-Trace"]=e.trace;if(e.guardrailIdentifier)r["X-Amzn-Bedrock-GuardrailIdentifier"]=e.guardrailIdentifier;if(e.guardrailVersion)r["X-Amzn-Bedrock-GuardrailVersion"]=e.guardrailVersion;return{body:await this.makeStreamRequest(e.modelId,r,t),contentType:"application/vnd.amazon.eventstream"}}async makeStreamRequest(e,t,r){let i=this.getCredentialsFromEnv(),s=`https://bedrock-runtime.${this.region}.amazonaws.com/model/${encodeURIComponent(e)}/invoke-with-response-stream`,o=this.signStreamRequest("POST",`/model/${encodeURIComponent(e)}/invoke-with-response-stream`,t,r,i),c=await fetch(s,{method:"POST",headers:o,body:r});if(!c.ok){let g=await c.text();throw Error(`Bedrock streaming error (${c.status}): ${g}`)}let u=c.body?.getReader();if(!u)throw Error("No response body for streaming");return this.parseEventStream(u)}async*parseEventStream(e){let t=new TextDecoder,r="";try{while(!0){let{done:i,value:s}=await e.read();if(i)break;r+=t.decode(s,{stream:!0});let o=this.extractJsonChunks(r);for(let c of o.parsed)yield{chunk:{bytes:new TextEncoder().encode(JSON.stringify(c))}};r=o.remaining}}finally{e.releaseLock()}}extractJsonChunks(e){let t=[],r=e,i=0,s=-1;for(let o=0;o<r.length;o++)if(r[o]==="{"){if(i===0)s=o;i++}else if(r[o]==="}"){if(i--,i===0&&s!==-1)try{let c=JSON.parse(r.slice(s,o+1));t.push(c),r=r.slice(o+1),o=-1,s=-1}catch{}}return{parsed:t,remaining:r}}getCredentialsFromEnv(){let e=process.env.AWS_ACCESS_KEY_ID,t=process.env.AWS_SECRET_ACCESS_KEY,r=process.env.AWS_SESSION_TOKEN;if(!e||!t)throw Error("AWS credentials not found in environment variables");return{accessKeyId:e,secretAccessKey:t,sessionToken:r}}signStreamRequest(e,t,r,i,s){let o=Oe("node:crypto"),c="bedrock-runtime",u=this.region,g=`bedrock-runtime.${u}.amazonaws.com`,m=new Date,d=m.toISOString().replace(/[:-]|\.\d{3}/g,""),l=m.toISOString().slice(0,10).replace(/-/g,""),p={host:g,"x-amz-date":d,...r};if(s.sessionToken)p["x-amz-security-token"]=s.sessionToken;let h=o.createHash("sha256").update(i,"utf8").digest("hex");p["x-amz-content-sha256"]=h,p["content-length"]=Buffer.byteLength(i).toString();let y=Object.keys(p).sort((E,ee)=>E.toLowerCase().localeCompare(ee.toLowerCase())),f=y.map((E)=>`${E.toLowerCase()}:${p[E].trim()}
|
|
2
2
|
`).join(""),S=y.map((E)=>E.toLowerCase()).join(";"),b=[e,t,"",f,S,h].join(`
|
|
3
3
|
`),I="AWS4-HMAC-SHA256",A=`${l}/${u}/bedrock-runtime/aws4_request`,O=[I,d,A,o.createHash("sha256").update(b).digest("hex")].join(`
|
|
4
|
-
`),H=o.createHmac("sha256",`AWS4${s.secretAccessKey}`).update(l).digest(),W=o.createHmac("sha256",H).update(u).digest(),X=o.createHmac("sha256",W).update("bedrock-runtime").digest(),Q=o.createHmac("sha256",X).update("aws4_request").digest(),Y=o.createHmac("sha256",Q).update(O).digest("hex"),Z=`${I} Credential=${s.accessKeyId}/${A}, SignedHeaders=${S}, Signature=${Y}`;return{...p,Authorization:Z}}async invokeClaudeMessages(e){let t=e.modelId||"anthropic.claude-3-haiku-20240307-v1:0",r={anthropic_version:"bedrock-2023-05-31",max_tokens:e.maxTokens||1024,messages:e.messages};if(e.temperature!==void 0)r.temperature=e.temperature;if(e.topP!==void 0)r.top_p=e.topP;if(e.topK!==void 0)r.top_k=e.topK;if(e.stopSequences)r.stop_sequences=e.stopSequences;if(e.system)r.system=e.system;if(e.tools)r.tools=e.tools;if(e.toolChoice)r.tool_choice=e.toolChoice;return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(t)}/invoke`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)})}async converse(e){let t={modelId:e.modelId,messages:e.messages};if(e.system)t.system=e.system;if(e.inferenceConfig)t.inferenceConfig=e.inferenceConfig;if(e.toolConfig)t.toolConfig=e.toolConfig;if(e.guardrailConfig)t.guardrailConfig=e.guardrailConfig;return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(e.modelId)}/converse`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)})}async generateEmbeddings(e){let t=e.modelId||"amazon.titan-embed-text-v1",r;if(t.includes("cohere"))r={texts:Array.isArray(e.inputText)?e.inputText:[e.inputText],input_type:"search_document"};else if(t.includes("titan")){if(r={inputText:Array.isArray(e.inputText)?e.inputText[0]:e.inputText},e.dimensions)r.dimensions=e.dimensions;if(e.normalize!==void 0)r.normalize=e.normalize}else r={inputText:Array.isArray(e.inputText)?e.inputText[0]:e.inputText};return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(t)}/invoke`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)})}async applyGuardrail(e){return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/guardrail/${encodeURIComponent(e.guardrailIdentifier)}/version/${encodeURIComponent(e.guardrailVersion)}/apply`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({source:e.source,content:e.content})})}}class on{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async listFoundationModels(e){let t={};if(e?.byProvider)t.byProvider=e.byProvider;if(e?.byCustomizationType)t.byCustomizationType=e.byCustomizationType;if(e?.byOutputModality)t.byOutputModality=e.byOutputModality;if(e?.byInferenceType)t.byInferenceType=e.byInferenceType;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/foundation-models",queryParams:Object.keys(t).length>0?t:void 0})}async getFoundationModel(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/foundation-models/${encodeURIComponent(e.modelIdentifier)}`})}async createModelCustomizationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-customization-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getModelCustomizationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-customization-jobs/${encodeURIComponent(e.jobIdentifier)}`})}async listModelCustomizationJobs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-customization-jobs",queryParams:Object.keys(t).length>0?t:void 0})}async stopModelCustomizationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/model-customization-jobs/${encodeURIComponent(e.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async listCustomModels(e){let t={};if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.baseModelArnEquals)t.baseModelArnEquals=e.baseModelArnEquals;if(e?.foundationModelArnEquals)t.foundationModelArnEquals=e.foundationModelArnEquals;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/custom-models",queryParams:Object.keys(t).length>0?t:void 0})}async getCustomModel(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/custom-models/${encodeURIComponent(e.modelIdentifier)}`})}async deleteCustomModel(e){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/custom-models/${encodeURIComponent(e.modelIdentifier)}`})}async requestModelAccess(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/foundation-model-entitlement",headers:{"Content-Type":"application/json"},body:JSON.stringify({modelId:e.modelId})})}async createGuardrail(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/guardrails",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getGuardrail(e){let t=`/guardrails/${encodeURIComponent(e.guardrailIdentifier)}`;if(e.guardrailVersion)t+=`?guardrailVersion=${encodeURIComponent(e.guardrailVersion)}`;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:t})}async listGuardrails(e){let t={};if(e?.guardrailIdentifier)t.guardrailIdentifier=e.guardrailIdentifier;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/guardrails",queryParams:Object.keys(t).length>0?t:void 0})}async deleteGuardrail(e){let t=`/guardrails/${encodeURIComponent(e.guardrailIdentifier)}`;if(e.guardrailVersion)t+=`?guardrailVersion=${encodeURIComponent(e.guardrailVersion)}`;return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:t})}async listModelInvocationJobs(e){let t={};if(e?.submitTimeAfter)t.submitTimeAfter=e.submitTimeAfter;if(e?.submitTimeBefore)t.submitTimeBefore=e.submitTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-invocation-jobs",queryParams:Object.keys(t).length>0?t:void 0})}async waitForModelCustomizationJob(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let o=await this.getModelCustomizationJob({jobIdentifier:e});if(o.status==="Completed"||o.status==="Failed"||o.status==="Stopped")return o;await new Promise((c)=>setTimeout(c,i))}throw Error(`Timeout waiting for model customization job ${e}`)}async requestAccessToModels(e){let t=[];for(let r of e)try{let i=await this.requestModelAccess({modelId:r});t.push({modelId:r,status:i.status})}catch(i){let s=i instanceof Error?i.message:String(i);t.push({modelId:r,status:"ERROR",error:s})}return t}async listModelsByProvider(e){return(await this.listFoundationModels({byProvider:e})).modelSummaries||[]}async listClaudeModels(){return this.listModelsByProvider("Anthropic")}async listEmbeddingModels(){return(await this.listFoundationModels({byOutputModality:"EMBEDDING"})).modelSummaries||[]}async createModelInvocationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-invocation-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getModelInvocationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-invocation-jobs/${encodeURIComponent(e.jobIdentifier)}`})}async stopModelInvocationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/model-invocation-jobs/${encodeURIComponent(e.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async createProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/provisioned-model-throughput",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/provisioned-model-throughput/${encodeURIComponent(e.provisionedModelId)}`})}async listProvisionedModelThroughputs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.modelArnEquals)t.modelArnEquals=e.modelArnEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/provisioned-model-throughput",queryParams:Object.keys(t).length>0?t:void 0})}async updateProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"PATCH",path:`/provisioned-model-throughput/${encodeURIComponent(e.provisionedModelId)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify({desiredProvisionedModelName:e.desiredProvisionedModelName,desiredModelId:e.desiredModelId})})}async deleteProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/provisioned-model-throughput/${encodeURIComponent(e.provisionedModelId)}`})}async createEvaluationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/evaluation-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getEvaluationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/evaluation-jobs/${encodeURIComponent(e.jobIdentifier)}`})}async listEvaluationJobs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/evaluation-jobs",queryParams:Object.keys(t).length>0?t:void 0})}async stopEvaluationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/evaluation-jobs/${encodeURIComponent(e.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async getInferenceProfile(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/inference-profiles/${encodeURIComponent(e.inferenceProfileIdentifier)}`})}async listInferenceProfiles(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.typeEquals)t.typeEquals=e.typeEquals;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/inference-profiles",queryParams:Object.keys(t).length>0?t:void 0})}async createInferenceProfile(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/inference-profiles",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteInferenceProfile(e){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/inference-profiles/${encodeURIComponent(e.inferenceProfileIdentifier)}`})}async createModelCopyJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-copy-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getModelCopyJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-copy-jobs/${encodeURIComponent(e.jobArn)}`})}async listModelCopyJobs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.sourceAccountEquals)t.sourceAccountEquals=e.sourceAccountEquals;if(e?.sourceModelArnEquals)t.sourceModelArnEquals=e.sourceModelArnEquals;if(e?.targetModelNameContains)t.targetModelNameContains=e.targetModelNameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-copy-jobs",queryParams:Object.keys(t).length>0?t:void 0})}}class wm{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async invokeAgent(e){let t={inputText:e.inputText};if(e.endSession!==void 0)t.endSession=e.endSession;if(e.enableTrace!==void 0)t.enableTrace=e.enableTrace;if(e.memoryId)t.memoryId=e.memoryId;if(e.sessionState)t.sessionState=e.sessionState;return await this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:`/agents/${encodeURIComponent(e.agentId)}/agentAliases/${encodeURIComponent(e.agentAliasId)}/sessions/${encodeURIComponent(e.sessionId)}/text`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)})}async retrieve(e){return this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/retrieve`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({retrievalQuery:e.retrievalQuery,retrievalConfiguration:e.retrievalConfiguration,nextToken:e.nextToken})})}async retrieveAndGenerate(e){return this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:"/retrieveAndGenerate",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)})}}class Rm{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createAgent(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:"/agents/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getAgent(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/agents/${encodeURIComponent(e.agentId)}/`})}async listAgents(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/agents/",queryParams:Object.keys(t).length>0?t:void 0})}async deleteAgent(e){let t={};if(e.skipResourceInUseCheck!==void 0)t.skipResourceInUseCheck=e.skipResourceInUseCheck.toString();return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/agents/${encodeURIComponent(e.agentId)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async prepareAgent(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/agents/${encodeURIComponent(e.agentId)}/`,headers:{"Content-Type":"application/json"}})}async createKnowledgeBase(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:"/knowledgebases/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getKnowledgeBase(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}`})}async listKnowledgeBases(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/knowledgebases/",queryParams:Object.keys(t).length>0?t:void 0})}async deleteKnowledgeBase(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}`})}async createDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}`})}async listDataSources(e){let t={};if(e.maxResults)t.maxResults=e.maxResults.toString();if(e.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/`,queryParams:Object.keys(t).length>0?t:void 0})}async updateDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}`})}async startIngestionJob(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}/ingestionjobs/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({clientToken:e.clientToken,description:e.description})})}async getIngestionJob(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}/ingestionjobs/${encodeURIComponent(e.ingestionJobId)}`})}async listIngestionJobs(e){let t={};if(e.maxResults)t.maxResults=e.maxResults.toString();if(e.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}/ingestionjobs/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({filters:e.filters,sortBy:e.sortBy,maxResults:e.maxResults,nextToken:e.nextToken})})}async createPrompt(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:"/prompts/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getPrompt(e){let t={};if(e.promptVersion)t.promptVersion=e.promptVersion;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/prompts/${encodeURIComponent(e.promptIdentifier)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async listPrompts(e){let t={};if(e?.promptIdentifier)t.promptIdentifier=e.promptIdentifier;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/prompts/",queryParams:Object.keys(t).length>0?t:void 0})}async deletePrompt(e){let t={};if(e.promptVersion)t.promptVersion=e.promptVersion;return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/prompts/${encodeURIComponent(e.promptIdentifier)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async createPromptVersion(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/prompts/${encodeURIComponent(e.promptIdentifier)}/versions/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({description:e.description,clientToken:e.clientToken,tags:e.tags})})}async createFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:"/flows/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`})}async listFlows(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/flows/",queryParams:Object.keys(t).length>0?t:void 0})}async updateFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteFlow(e){let t={};if(e.skipResourceInUseCheck!==void 0)t.skipResourceInUseCheck=e.skipResourceInUseCheck.toString();return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async prepareFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`,headers:{"Content-Type":"application/json"}})}async createFlowVersion(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/versions/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({description:e.description,clientToken:e.clientToken})})}async createFlowAlias(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/aliases/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}async function PA(e,t="us-east-1"){return new on(t).requestAccessToModels(e)}async function NA(e="us-east-1"){return new on(e).listClaudeModels()}async function kA(e,t){let s=(await new sn(t?.region||"us-east-1").invokeClaudeMessages({modelId:t?.modelId||"anthropic.claude-3-haiku-20240307-v1:0",messages:[{role:"user",content:e}],maxTokens:t?.maxTokens||1024,temperature:t?.temperature})).content.find((o)=>o.type==="text");return s?.type==="text"?s.text:""}async function BA(e,t){let i=await new sn(t?.region||"us-east-1").generateEmbeddings({modelId:t?.modelId||"amazon.titan-embed-text-v1",inputText:e});return i.embeddings||i.embedding||[]}class At{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"comprehend",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Comprehend_20171127.${e}`},body:JSON.stringify(t)})}async detectSentiment(e){return this.request("DetectSentiment",e)}async detectEntities(e){return this.request("DetectEntities",e)}async detectKeyPhrases(e){return this.request("DetectKeyPhrases",e)}async detectDominantLanguage(e){return this.request("DetectDominantLanguage",e)}async detectPiiEntities(e){return this.request("DetectPiiEntities",e)}async containsPiiEntities(e){return this.request("ContainsPiiEntities",e)}async detectSyntax(e){return this.request("DetectSyntax",e)}async detectTargetedSentiment(e){return this.request("DetectTargetedSentiment",e)}async classifyDocument(e){return this.request("ClassifyDocument",e)}async batchDetectSentiment(e){return this.request("BatchDetectSentiment",e)}async batchDetectEntities(e){return this.request("BatchDetectEntities",e)}async batchDetectKeyPhrases(e){return this.request("BatchDetectKeyPhrases",e)}async batchDetectDominantLanguage(e){return this.request("BatchDetectDominantLanguage",e)}async batchDetectSyntax(e){return this.request("BatchDetectSyntax",e)}async startSentimentDetectionJob(e){return this.request("StartSentimentDetectionJob",e)}async startEntitiesDetectionJob(e){return this.request("StartEntitiesDetectionJob",e)}async startKeyPhrasesDetectionJob(e){return this.request("StartKeyPhrasesDetectionJob",e)}async startPiiEntitiesDetectionJob(e){return this.request("StartPiiEntitiesDetectionJob",e)}async describeSentimentDetectionJob(e){return this.request("DescribeSentimentDetectionJob",e)}async analyzeSentiment(e,t="en"){let r=await this.detectSentiment({Text:e,LanguageCode:t});return{sentiment:r.Sentiment,scores:{positive:r.SentimentScore.Positive,negative:r.SentimentScore.Negative,neutral:r.SentimentScore.Neutral,mixed:r.SentimentScore.Mixed}}}async extractEntities(e,t="en"){return(await this.detectEntities({Text:e,LanguageCode:t})).Entities.map((i)=>({text:i.Text||"",type:i.Type||"UNKNOWN",score:i.Score||0}))}async extractKeyPhrases(e,t="en"){return(await this.detectKeyPhrases({Text:e,LanguageCode:t})).KeyPhrases.map((i)=>i.Text||"").filter(Boolean)}async detectLanguage(e){let r=(await this.detectDominantLanguage({Text:e})).Languages[0];return{languageCode:r?.LanguageCode||"unknown",confidence:r?.Score||0}}async findPii(e,t="en"){return(await this.detectPiiEntities({Text:e,LanguageCode:t})).Entities.map((i)=>({type:i.Type||"UNKNOWN",beginOffset:i.BeginOffset||0,endOffset:i.EndOffset||0,score:i.Score||0}))}async hasPii(e,t="en"){return(await this.detectPiiEntities({Text:e,LanguageCode:t})).Entities.length>0}async redactPii(e,t="en"){let i=[...(await this.detectPiiEntities({Text:e,LanguageCode:t})).Entities].sort((o,c)=>(c.EndOffset||0)-(o.EndOffset||0)),s=e;for(let o of i)if(o.BeginOffset!==void 0&&o.EndOffset!==void 0)s=s.slice(0,o.BeginOffset)+`[${o.Type}]`+s.slice(o.EndOffset);return s}}async function xA(e,t){let i=await new At(t?.region||"us-east-1").analyzeSentiment(e,t?.languageCode||"en"),s=Math.max(i.scores.positive,i.scores.negative,i.scores.neutral,i.scores.mixed);return{sentiment:i.sentiment,confidence:s}}async function _A(e,t){return new At(t?.region||"us-east-1").extractEntities(e,t?.languageCode||"en")}async function OA(e,t){return(await new At(t||"us-east-1").detectLanguage(e)).languageCode}async function LA(e,t){return new At(t?.region||"us-east-1").hasPii(e,t?.languageCode||"en")}class yt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"rekognition",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`RekognitionService.${e}`},body:JSON.stringify(t)})}async detectFaces(e){return this.request("DetectFaces",e)}async detectLabels(e){return this.request("DetectLabels",e)}async detectText(e){return this.request("DetectText",e)}async detectModerationLabels(e){return this.request("DetectModerationLabels",e)}async recognizeCelebrities(e){return this.request("RecognizeCelebrities",e)}async compareFaces(e){return this.request("CompareFaces",e)}async createCollection(e){return this.request("CreateCollection",e)}async deleteCollection(e){return this.request("DeleteCollection",e)}async listCollections(e){return this.request("ListCollections",e||{})}async indexFaces(e){return this.request("IndexFaces",e)}async searchFacesByImage(e){return this.request("SearchFacesByImage",e)}async searchFaces(e){return this.request("SearchFaces",e)}async startLabelDetection(e){return this.request("StartLabelDetection",e)}async getLabelDetection(e){return this.request("GetLabelDetection",e)}async startFaceDetection(e){return this.request("StartFaceDetection",e)}async getFaceDetection(e){return this.request("GetFaceDetection",e)}async startContentModeration(e){return this.request("StartContentModeration",e)}async getContentModeration(e){return this.request("GetContentModeration",e)}async analyzeS3Image(e,t,r){return(await this.detectLabels({Image:{S3Object:{Bucket:e,Name:t}},MaxLabels:r?.maxLabels,MinConfidence:r?.minConfidence})).Labels||[]}async analyzeImageBytes(e,t){return(await this.detectLabels({Image:{Bytes:e},MaxLabels:t?.maxLabels,MinConfidence:t?.minConfidence})).Labels||[]}async isImageSafe(e,t=50){return((await this.detectModerationLabels({Image:e,MinConfidence:t})).ModerationLabels?.length||0)===0}async countFaces(e){return(await this.detectFaces({Image:e,Attributes:["DEFAULT"]})).FaceDetails?.length||0}async extractText(e){return(await this.detectText({Image:e})).TextDetections?.filter((r)=>r.Type==="LINE").map((r)=>r.DetectedText||"")||[]}async findFace(e,t,r=80){try{return(await this.searchFacesByImage({CollectionId:e,Image:t,FaceMatchThreshold:r,MaxFaces:1})).FaceMatches?.[0]||null}catch(i){if(i instanceof Error&&i.message.includes("InvalidParameterException"))return null;throw i}}}async function Dm(e,t,r){return(await new yt(r?.region||"us-east-1").analyzeS3Image(e,t,{maxLabels:r?.maxLabels})).map((o)=>o.Name||"").filter(Boolean)}async function Pm(e,t,r){return new yt(r||"us-east-1").countFaces({S3Object:{Bucket:e,Name:t}})}async function Nm(e,t,r){return new yt(r?.region||"us-east-1").isImageSafe({S3Object:{Bucket:e,Name:t}},r?.threshold)}class It{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"textract",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Textract.${e}`},body:JSON.stringify(t)})}async detectDocumentText(e){return this.request("DetectDocumentText",e)}async analyzeDocument(e){return this.request("AnalyzeDocument",e)}async analyzeExpense(e){return this.request("AnalyzeExpense",e)}async analyzeID(e){return this.request("AnalyzeID",e)}async startDocumentTextDetection(e){return this.request("StartDocumentTextDetection",e)}async getDocumentTextDetection(e){return this.request("GetDocumentTextDetection",e)}async startDocumentAnalysis(e){return this.request("StartDocumentAnalysis",e)}async getDocumentAnalysis(e){return this.request("GetDocumentAnalysis",e)}async startExpenseAnalysis(e){return this.request("StartExpenseAnalysis",e)}async getExpenseAnalysis(e){return this.request("GetExpenseAnalysis",e)}async startLendingAnalysis(e){return this.request("StartLendingAnalysis",e)}async getLendingAnalysis(e){return this.request("GetLendingAnalysis",e)}async extractText(e){return(await this.detectDocumentText({Document:e})).Blocks?.filter((r)=>r.BlockType==="LINE").map((r)=>r.Text||"")||[]}async extractTextFromS3(e,t){return this.extractText({S3Object:{Bucket:e,Name:t}})}async extractForms(e){let r=(await this.analyzeDocument({Document:e,FeatureTypes:["FORMS"]})).Blocks||[],i=new Map;r.forEach((o)=>o.Id&&i.set(o.Id,o));let s=[];for(let o of r)if(o.BlockType==="KEY_VALUE_SET"&&o.EntityTypes?.includes("KEY")){let c=this.getBlockText(o,i),u=o.Relationships?.find((m)=>m.Type==="VALUE"),g="";if(u?.Ids)for(let m of u.Ids){let d=i.get(m);if(d)g+=this.getBlockText(d,i)+" "}s.push({key:c.trim(),value:g.trim(),confidence:o.Confidence||0})}return s}async extractTables(e){let r=(await this.analyzeDocument({Document:e,FeatureTypes:["TABLES"]})).Blocks||[],i=new Map;r.forEach((o)=>o.Id&&i.set(o.Id,o));let s=[];for(let o of r)if(o.BlockType==="TABLE"){let u=(o.Relationships?.find((l)=>l.Type==="CHILD")?.Ids||[]).map((l)=>i.get(l)).filter(Boolean),g=0,m=0;for(let l of u){if(l.RowIndex&&l.RowIndex>g)g=l.RowIndex;if(l.ColumnIndex&&l.ColumnIndex>m)m=l.ColumnIndex}let d=Array.from({length:g},()=>Array.from({length:m},()=>""));for(let l of u)if(l.RowIndex&&l.ColumnIndex)d[l.RowIndex-1][l.ColumnIndex-1]=this.getBlockText(l,i);s.push({rows:d})}return s}async extractExpenseSummary(e){let r=(await this.analyzeExpense({Document:e})).ExpenseDocuments?.[0];if(!r)return{items:[]};let i={};for(let o of r.SummaryFields||[]){let c=o.Type?.Text?.toUpperCase(),u=o.ValueDetection?.Text;if(c==="VENDOR_NAME")i.vendor=u;if(c==="TOTAL")i.total=u;if(c==="INVOICE_RECEIPT_DATE")i.date=u}let s=[];for(let o of r.LineItemGroups||[])for(let c of o.LineItems||[]){let u={};for(let g of c.LineItemExpenseFields||[]){let m=g.Type?.Text?.toUpperCase(),d=g.ValueDetection?.Text;if(m==="ITEM")u.description=d;if(m==="QUANTITY")u.quantity=d;if(m==="PRICE")u.price=d}if(u.description||u.price)s.push(u)}return{...i,items:s}}async queryDocument(e,t){let i=(await this.analyzeDocument({Document:e,FeatureTypes:["QUERIES"],QueriesConfig:{Queries:t.map((o)=>({Text:o}))}})).Blocks||[],s=[];for(let o of i)if(o.BlockType==="QUERY_RESULT"&&o.Text){let c=i.find((u)=>u.BlockType==="QUERY"&&u.Relationships?.some((g)=>g.Type==="ANSWER"&&g.Ids?.includes(o.Id||"")));s.push({question:c?.Query?.Text||"",answer:o.Text,confidence:o.Confidence||0})}return s}async waitForJob(e,t,r){let i=r?.maxWaitMs??300000,s=r?.pollIntervalMs??5000,o=Date.now();while(Date.now()-o<i){let c=await t(e);if(c.JobStatus==="SUCCEEDED"||c.JobStatus==="PARTIAL_SUCCESS")return;if(c.JobStatus==="FAILED")throw Error(`Textract job ${e} failed`);await new Promise((u)=>setTimeout(u,s))}throw Error(`Timeout waiting for Textract job ${e}`)}getBlockText(e,t){if(e.Text)return e.Text;return(e.Relationships?.find((i)=>i.Type==="CHILD")?.Ids||[]).map((i)=>t.get(i)?.Text||"").join(" ")}}async function km(e,t,r){return(await new It(r||"us-east-1").extractTextFromS3(e,t)).join(`
|
|
5
|
-
`)}async function Bm(e,t,r){let s=await new It(r||"us-east-1").extractForms({S3Object:{Bucket:e,Name:t}});return Object.fromEntries(s.map((o)=>[o.key,o.value]))}async function xm(e,t,r){return(await new It(r||"us-east-1").extractTables({S3Object:{Bucket:e,Name:t}})).map((o)=>o.rows)}class an{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async synthesizeSpeech(e){let t=await this.client.request({service:"polly",region:this.region,method:"POST",path:"/v1/speech",headers:{"Content-Type":"application/json"},body:JSON.stringify({Engine:e.Engine,LanguageCode:e.LanguageCode,LexiconNames:e.LexiconNames,OutputFormat:e.OutputFormat,SampleRate:e.SampleRate,SpeechMarkTypes:e.SpeechMarkTypes,Text:e.Text,TextType:e.TextType,VoiceId:e.VoiceId}),rawResponse:!0,returnHeaders:!0});return{AudioStream:new TextEncoder().encode(t.body),ContentType:t.headers?.["content-type"],RequestCharacters:t.headers?.["x-amzn-requestcharacters"]?Number.parseInt(t.headers["x-amzn-requestcharacters"]):void 0}}async startSpeechSynthesisTask(e){return this.client.request({service:"polly",region:this.region,method:"POST",path:"/v1/synthesisTasks",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getSpeechSynthesisTask(e){return this.client.request({service:"polly",region:this.region,method:"GET",path:`/v1/synthesisTasks/${encodeURIComponent(e.TaskId)}`})}async listSpeechSynthesisTasks(e){let t={};if(e?.MaxResults)t.MaxResults=e.MaxResults.toString();if(e?.NextToken)t.NextToken=e.NextToken;if(e?.Status)t.Status=e.Status;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/synthesisTasks",queryParams:Object.keys(t).length>0?t:void 0})}async describeVoices(e){let t={};if(e?.Engine)t.Engine=e.Engine;if(e?.LanguageCode)t.LanguageCode=e.LanguageCode;if(e?.IncludeAdditionalLanguageCodes!==void 0)t.IncludeAdditionalLanguageCodes=e.IncludeAdditionalLanguageCodes.toString();if(e?.NextToken)t.NextToken=e.NextToken;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/voices",queryParams:Object.keys(t).length>0?t:void 0})}async putLexicon(e){return this.client.request({service:"polly",region:this.region,method:"PUT",path:`/v1/lexicons/${encodeURIComponent(e.Name)}`,headers:{"Content-Type":"application/pls+xml"},body:e.Content})}async getLexicon(e){return this.client.request({service:"polly",region:this.region,method:"GET",path:`/v1/lexicons/${encodeURIComponent(e.Name)}`})}async deleteLexicon(e){return this.client.request({service:"polly",region:this.region,method:"DELETE",path:`/v1/lexicons/${encodeURIComponent(e.Name)}`})}async listLexicons(e){let t={};if(e?.NextToken)t.NextToken=e.NextToken;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/lexicons",queryParams:Object.keys(t).length>0?t:void 0})}async textToSpeech(e,t){return(await this.synthesizeSpeech({Text:e,VoiceId:t?.voiceId||"Joanna",Engine:t?.engine||"neural",LanguageCode:t?.languageCode,OutputFormat:"mp3"})).AudioStream||new Uint8Array}async ssmlToSpeech(e,t){return(await this.synthesizeSpeech({Text:e,TextType:"ssml",VoiceId:t?.voiceId||"Joanna",Engine:t?.engine||"neural",LanguageCode:t?.languageCode,OutputFormat:"mp3"})).AudioStream||new Uint8Array}async saveToS3(e,t,r,i){let s=await this.startSpeechSynthesisTask({Text:e,TextType:i?.textType||"text",VoiceId:i?.voiceId||"Joanna",Engine:i?.engine||"neural",LanguageCode:i?.languageCode,OutputFormat:"mp3",OutputS3BucketName:t,OutputS3KeyPrefix:r});return{taskId:s.SynthesisTask?.TaskId||"",outputUri:s.SynthesisTask?.OutputUri||""}}async listVoicesForLanguage(e){return(await this.describeVoices({LanguageCode:e})).Voices||[]}async listNeuralVoices(){return(await this.describeVoices({Engine:"neural"})).Voices||[]}async waitForTask(e,t){let r=t?.maxWaitMs??300000,i=t?.pollIntervalMs??5000,s=Date.now();while(Date.now()-s<r){let c=(await this.getSpeechSynthesisTask({TaskId:e})).SynthesisTask;if(c?.TaskStatus==="completed")return c;if(c?.TaskStatus==="failed")throw Error(`Polly task ${e} failed: ${c.TaskStatusReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for Polly task ${e}`)}}async function $A(e,t){return new an(t?.region||"us-east-1").textToSpeech(e,t)}async function MA(e){return(await new an(e?.region||"us-east-1").describeVoices({LanguageCode:e?.languageCode,Engine:e?.engine})).Voices||[]}function FA(e,t){let r="<speak>";if(t?.rate||t?.pitch||t?.volume){if(r+="<prosody",t.rate)r+=` rate="${t.rate}"`;if(t.pitch)r+=` pitch="${t.pitch}"`;if(t.volume)r+=` volume="${t.volume}"`;r+=`>${e}</prosody>`}else r+=e;return r+="</speak>",r}class Xt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"translate",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSShineFrontendService_20170701.${e}`},body:JSON.stringify(t)})}async translateText(e){return this.request("TranslateText",e)}async translateDocument(e){return this.request("TranslateDocument",e)}async startTextTranslationJob(e){return this.request("StartTextTranslationJob",e)}async describeTextTranslationJob(e){return this.request("DescribeTextTranslationJob",e)}async listTextTranslationJobs(e){return this.request("ListTextTranslationJobs",e||{})}async stopTextTranslationJob(e){return this.request("StopTextTranslationJob",e)}async listLanguages(e){return this.request("ListLanguages",e||{})}async importTerminology(e){return this.request("ImportTerminology",e)}async getTerminology(e){return this.request("GetTerminology",e)}async listTerminologies(e){return this.request("ListTerminologies",e||{})}async deleteTerminology(e){return this.request("DeleteTerminology",e)}async createParallelData(e){return this.request("CreateParallelData",e)}async getParallelData(e){return this.request("GetParallelData",e)}async listParallelData(e){return this.request("ListParallelData",e||{})}async deleteParallelData(e){return this.request("DeleteParallelData",e)}async translate(e,t,r="auto"){return(await this.translateText({Text:e,SourceLanguageCode:r,TargetLanguageCode:t})).TranslatedText}async translateFormal(e,t,r="auto",i="FORMAL"){return(await this.translateText({Text:e,SourceLanguageCode:r,TargetLanguageCode:t,Settings:{Formality:i}})).TranslatedText}async translateToMultiple(e,t,r="auto"){let i={};for(let s of t)i[s]=await this.translate(e,s,r);return i}async waitForJob(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeTextTranslationJob({JobId:e})).TextTranslationJobProperties;if(c?.JobStatus==="COMPLETED"||c?.JobStatus==="COMPLETED_WITH_ERROR")return c;if(c?.JobStatus==="FAILED"||c?.JobStatus==="STOPPED")throw Error(`Translation job ${e} failed: ${c.Message}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for translation job ${e}`)}async getSupportedLanguages(){return(await this.listLanguages()).Languages?.map((t)=>t.LanguageCode||"").filter(Boolean)||[]}}async function UA(e,t,r){return new Xt(r?.region||"us-east-1").translate(e,t,r?.sourceLanguage||"auto")}async function QA(e,t,r){return new Xt(r?.region||"us-east-1").translateToMultiple(e,t,r?.sourceLanguage||"auto")}async function HA(e){return(await new Xt(e||"us-east-1").listLanguages()).Languages||[]}class ba{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"personalize",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalize.${e}`},body:JSON.stringify(t)})}async createDatasetGroup(e){return this.request("CreateDatasetGroup",e)}async describeDatasetGroup(e){return this.request("DescribeDatasetGroup",e)}async listDatasetGroups(e){return this.request("ListDatasetGroups",e||{})}async createSchema(e){return this.request("CreateSchema",e)}async createDataset(e){return this.request("CreateDataset",e)}async createDatasetImportJob(e){return this.request("CreateDatasetImportJob",e)}async describeDatasetImportJob(e){return this.request("DescribeDatasetImportJob",e)}async createSolution(e){return this.request("CreateSolution",e)}async createSolutionVersion(e){return this.request("CreateSolutionVersion",e)}async describeSolutionVersion(e){return this.request("DescribeSolutionVersion",e)}async createCampaign(e){return this.request("CreateCampaign",e)}async describeCampaign(e){return this.request("DescribeCampaign",e)}async createRecommender(e){return this.request("CreateRecommender",e)}async describeRecommender(e){return this.request("DescribeRecommender",e)}async listRecommenders(e){return this.request("ListRecommenders",e||{})}async createEventTracker(e){return this.request("CreateEventTracker",e)}async describeEventTracker(e){return this.request("DescribeEventTracker",e)}async createFilter(e){return this.request("CreateFilter",e)}async listRecipes(e){return this.request("ListRecipes",e||{})}async waitForSolutionVersion(e,t){let r=t?.maxWaitMs??7200000,i=t?.pollIntervalMs??60000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeSolutionVersion({solutionVersionArn:e})).solutionVersion;if(c?.status==="ACTIVE")return c;if(c?.status==="CREATE FAILED")throw Error(`Solution version failed: ${c.failureReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for solution version ${e}`)}async waitForCampaign(e,t){let r=t?.maxWaitMs??1800000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeCampaign({campaignArn:e})).campaign;if(c?.status==="ACTIVE")return c;if(c?.status==="CREATE FAILED")throw Error(`Campaign failed: ${c.failureReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for campaign ${e}`)}async waitForDatasetImportJob(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeDatasetImportJob({datasetImportJobArn:e})).datasetImportJob;if(c?.status==="ACTIVE")return c;if(c?.status==="CREATE FAILED")throw Error(`Dataset import job failed: ${c.failureReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for dataset import job ${e}`)}}class Ea{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"personalize-runtime",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalizeRuntime.${e}`},body:JSON.stringify(t)})}async getRecommendations(e){return this.request("GetRecommendations",e)}async getPersonalizedRanking(e){return this.request("GetPersonalizedRanking",e)}async recommendForUser(e,t,r=10){return(await this.getRecommendations({campaignArn:e,userId:t,numResults:r})).itemList?.map((s)=>s.itemId||"").filter(Boolean)||[]}async getSimilarItems(e,t,r=10){return(await this.getRecommendations({campaignArn:e,itemId:t,numResults:r})).itemList?.map((s)=>s.itemId||"").filter(Boolean)||[]}async rankItems(e,t,r){return(await this.getPersonalizedRanking({campaignArn:e,userId:t,inputList:r})).personalizedRanking?.map((s)=>s.itemId||"").filter(Boolean)||[]}}class Gl{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"personalize-events",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalizeEvents.${e}`},body:JSON.stringify(t)})}async putEvents(e){return this.request("PutEvents",e)}async putItems(e){return this.request("PutItems",e)}async putUsers(e){return this.request("PutUsers",e)}async trackEvent(e,t,r,i,s="click"){await this.putEvents({trackingId:e,sessionId:t,userId:r,eventList:[{eventType:s,itemId:i,sentAt:new Date().toISOString()}]})}async trackPurchase(e,t,r,i,s){await this.putEvents({trackingId:e,sessionId:t,userId:r,eventList:[{eventType:"purchase",eventValue:s,itemId:i,sentAt:new Date().toISOString()}]})}}async function GA(e,t,r){return new Ea(r?.region||"us-east-1").recommendForUser(e,t,r?.numResults)}async function qA(e,t,r){return new Ea(r?.region||"us-east-1").getSimilarItems(e,t,r?.numResults)}async function VA(e,t,r,i,s="click",o){await new Gl(o||"us-east-1").trackEvent(e,t,r,i,s)}class Yt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"kendra",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSKendraFrontendService.${e}`},body:JSON.stringify(t)})}async createIndex(e){return this.request("CreateIndex",e)}async describeIndex(e){return this.request("DescribeIndex",e)}async listIndices(e){return this.request("ListIndices",e||{})}async deleteIndex(e){return this.request("DeleteIndex",e)}async createDataSource(e){return this.request("CreateDataSource",e)}async describeDataSource(e){return this.request("DescribeDataSource",e)}async listDataSources(e){return this.request("ListDataSources",e)}async startDataSourceSyncJob(e){return this.request("StartDataSourceSyncJob",e)}async stopDataSourceSyncJob(e){return this.request("StopDataSourceSyncJob",e)}async query(e){return this.request("Query",e)}async retrieve(e){return this.request("Retrieve",e)}async batchPutDocument(e){return this.request("BatchPutDocument",e)}async batchDeleteDocument(e){return this.request("BatchDeleteDocument",e)}async search(e,t,r){return(await this.query({IndexId:e,QueryText:t,PageSize:r?.pageSize,PageNumber:r?.pageNumber,AttributeFilter:r?.attributeFilter})).ResultItems||[]}async retrieveDocuments(e,t,r){return(await this.retrieve({IndexId:e,QueryText:t,PageSize:r?.pageSize,PageNumber:r?.pageNumber})).ResultItems||[]}async addDocument(e,t){let r=t.attributes?Object.entries(t.attributes).map(([s,o])=>({Key:s,Value:typeof o==="number"?{LongValue:o}:Array.isArray(o)?{StringListValue:o}:{StringValue:o}})):void 0,i=await this.batchPutDocument({IndexId:e,Documents:[{Id:t.id,Title:t.title,Blob:new TextEncoder().encode(t.content),ContentType:"PLAIN_TEXT",Attributes:r}]});if(i.FailedDocuments?.length)throw Error(`Failed to add document: ${i.FailedDocuments[0].ErrorMessage}`)}async addDocuments(e,t){let r=t.map((o)=>{let c=o.attributes?Object.entries(o.attributes).map(([u,g])=>({Key:u,Value:typeof g==="number"?{LongValue:g}:Array.isArray(g)?{StringListValue:g}:{StringValue:g}})):void 0;return{Id:o.id,Title:o.title,Blob:new TextEncoder().encode(o.content),ContentType:"PLAIN_TEXT",Attributes:c}}),s=(await this.batchPutDocument({IndexId:e,Documents:r})).FailedDocuments?.map((o)=>({id:o.Id||"unknown",error:o.ErrorMessage||"Unknown error"}))||[];return{succeeded:t.length-s.length,failed:s}}async deleteDocuments(e,t){let r=await this.batchDeleteDocument({IndexId:e,DocumentIdList:t});if(r.FailedDocuments?.length)throw Error(`Failed to delete documents: ${r.FailedDocuments.map((i)=>i.Id).join(", ")}`)}async waitForIndex(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let o=await this.describeIndex({Id:e});if(o.Status==="ACTIVE")return o;if(o.Status==="FAILED")throw Error(`Index creation failed: ${o.ErrorMessage}`);await new Promise((c)=>setTimeout(c,i))}throw Error(`Timeout waiting for index ${e}`)}async waitForDataSource(e,t,r){let i=r?.maxWaitMs??1800000,s=r?.pollIntervalMs??30000,o=Date.now();while(Date.now()-o<i){let c=await this.describeDataSource({Id:t,IndexId:e});if(c.Status==="ACTIVE")return c;if(c.Status==="FAILED")throw Error(`Data source creation failed: ${c.ErrorMessage}`);await new Promise((u)=>setTimeout(u,s))}throw Error(`Timeout waiting for data source ${t}`)}}async function _m(e,t,r){return(await new Yt(r?.region||"us-east-1").search(e,t,{pageSize:r?.pageSize})).map((o)=>({title:o.DocumentTitle?.Text||"",excerpt:o.DocumentExcerpt?.Text||"",uri:o.DocumentURI||"",score:o.ScoreAttributes?.ScoreConfidence||"NOT_AVAILABLE"}))}async function Om(e,t,r){return(await new Yt(r?.region||"us-east-1").retrieveDocuments(e,t,{pageSize:r?.pageSize})).map((o)=>({content:o.Content||"",uri:o.DocumentURI||"",score:o.ScoreAttributes?.ScoreConfidence||"NOT_AVAILABLE"}))}class Zt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){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.${e}`},body:JSON.stringify(t)})}async putRule(e){return this.request("PutRule",e)}async deleteRule(e){return this.request("DeleteRule",e)}async describeRule(e){return this.request("DescribeRule",e)}async listRules(e){return this.request("ListRules",e||{})}async listEventBuses(e){return this.request("ListEventBuses",e||{})}async enableRule(e){return this.request("EnableRule",e)}async disableRule(e){return this.request("DisableRule",e)}async putTargets(e){return this.request("PutTargets",e)}async removeTargets(e){return this.request("RemoveTargets",e)}async listTargetsByRule(e){return this.request("ListTargetsByRule",e)}async putEvents(e){return this.request("PutEvents",e)}async createSchedule(e){return this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${e.Name}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}class We{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async describeCacheClusters(e){let t={Action:"DescribeCacheClusters",Version:"2015-02-02",ShowCacheNodeInfo:"true"};if(e)t.CacheClusterId=e;let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{CacheClusters:this.parseCacheClusters(r)}}async describeReplicationGroups(e){let t={Action:"DescribeReplicationGroups",Version:"2015-02-02"};if(e)t.ReplicationGroupId=e;let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{ReplicationGroups:[]}}async createCacheCluster(e){let t={Action:"CreateCacheCluster",Version:"2015-02-02",CacheClusterId:e.cacheClusterId,Engine:e.engine,CacheNodeType:e.cacheNodeType};if(e.numCacheNodes)t.NumCacheNodes=e.numCacheNodes;if(e.engineVersion)t.EngineVersion=e.engineVersion;if(e.port)t.Port=e.port;if(e.securityGroupIds&&e.securityGroupIds.length>0)e.securityGroupIds.forEach((i,s)=>{t[`SecurityGroupIds.member.${s+1}`]=i});if(e.subnetGroupName)t.CacheSubnetGroupName=e.subnetGroupName;if(e.tags&&e.tags.length>0)e.tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{CacheCluster:this.parseCacheCluster(r)}}async deleteCacheCluster(e,t){let r={Action:"DeleteCacheCluster",Version:"2015-02-02",CacheClusterId:e};if(t)r.FinalSnapshotIdentifier=t;await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}async rebootCacheCluster(e,t){let r={Action:"RebootCacheCluster",Version:"2015-02-02",CacheClusterId:e};t.forEach((i,s)=>{r[`CacheNodeIdsToReboot.member.${s+1}`]=i}),await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}async describeCacheEngineVersions(e){let t={Action:"DescribeCacheEngineVersions",Version:"2015-02-02"};if(e)t.Engine=e;let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{CacheEngineVersions:[]}}async getCacheStatistics(e){let t=await this.describeCacheClusters(e);if(!t.CacheClusters||t.CacheClusters.length===0)throw Error(`Cache cluster ${e} not found`);return{cpuUtilization:0,evictions:0,hits:0,misses:0,connections:0}}parseCacheClusters(e){if(e.CacheClusterId)return[{CacheClusterId:e.CacheClusterId,CacheClusterStatus:e.CacheClusterStatus||"available",Engine:e.Engine||"redis",EngineVersion:e.EngineVersion||"7.0",CacheNodeType:e.CacheNodeType||"cache.t3.micro",NumCacheNodes:Number.parseInt(e.NumCacheNodes||"1"),CacheClusterCreateTime:e.CacheClusterCreateTime||new Date().toISOString()}];return[]}parseCacheCluster(e){return{CacheClusterId:e.CacheClusterId,CacheClusterStatus:e.CacheClusterStatus||"creating",Engine:e.Engine||"redis",EngineVersion:e.EngineVersion||"7.0",CacheNodeType:e.CacheNodeType||"cache.t3.micro",NumCacheNodes:Number.parseInt(e.NumCacheNodes||"1"),CacheClusterCreateTime:e.CacheClusterCreateTime||new Date().toISOString()}}}class cn{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async createRule(e){let t={Action:"PutRule",Name:e.name,ScheduleExpression:e.scheduleExpression,Version:"2015-10-07"};if(e.description)t.Description=e.description;if(e.state)t.State=e.state;else t.State="ENABLED";return{RuleArn:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.PutRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e.name,ScheduleExpression:e.scheduleExpression,State:e.state||"ENABLED",Description:e.description})})).RuleArn}}async putTargets(e,t){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.PutTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:e,Targets:t})})}async listRules(e){let t={};if(e)t.NamePrefix=e;return{Rules:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.ListRules","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})).Rules||[]}}async describeRule(e){let t=await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DescribeRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e})});return{Name:t.Name,Arn:t.Arn,ScheduleExpression:t.ScheduleExpression,State:t.State,Description:t.Description}}async listTargetsByRule(e){return{Targets:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.ListTargetsByRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:e})})).Targets||[]}}async deleteRule(e,t){if(t)try{let r=await this.listTargetsByRule(e);if(r.Targets&&r.Targets.length>0)await this.removeTargets(e,r.Targets.map((i)=>i.Id))}catch{}await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DeleteRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e,Force:t||!1})})}async removeTargets(e,t){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.RemoveTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:e,Ids:t})})}async enableRule(e){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.EnableRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e})})}async disableRule(e){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DisableRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e})})}async createLambdaSchedule(e){let t=await this.createRule({name:e.name,scheduleExpression:e.scheduleExpression,description:e.description,state:"ENABLED"});return await this.putTargets(e.name,[{Id:"1",Arn:e.functionArn,Input:e.input}]),t}async createEcsSchedule(e){let t=await this.createRule({name:e.name,scheduleExpression:e.scheduleExpression,description:e.description,state:"ENABLED"});return await this.putTargets(e.name,[{Id:"1",Arn:e.clusterArn,RoleArn:e.roleArn,Input:JSON.stringify({containerOverrides:[]})}]),t}async listSchedules(e){let t={};if(e?.NamePrefix)t.NamePrefix=e.NamePrefix;if(e?.State)t.State=e.State;let r=e?.GroupName||"default";return{Schedules:(await this.client.request({service:"scheduler",region:this.region,method:"GET",path:"/schedules",queryParams:{...t,ScheduleGroup:r}}))?.Schedules||[]}}async getSchedule(e){try{let t={};if(e.GroupName)t.groupName=e.GroupName;return await this.client.request({service:"scheduler",region:this.region,method:"GET",path:`/schedules/${encodeURIComponent(e.Name)}`,queryParams:Object.keys(t).length>0?t:void 0})}catch(t){if(t.statusCode===404||t.code==="ResourceNotFoundException")return null;throw t}}async createSchedule(e){let t={ScheduleExpression:e.ScheduleExpression,FlexibleTimeWindow:e.FlexibleTimeWindow,Target:e.Target};if(e.GroupName)t.GroupName=e.GroupName;if(e.ScheduleExpressionTimezone)t.ScheduleExpressionTimezone=e.ScheduleExpressionTimezone;if(e.Description)t.Description=e.Description;if(e.State)t.State=e.State;if(e.StartDate)t.StartDate=e.StartDate.toISOString();if(e.EndDate)t.EndDate=e.EndDate.toISOString();return{ScheduleArn:(await this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${encodeURIComponent(e.Name)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))?.ScheduleArn||""}}async updateSchedule(e){let t={};if(e.GroupName)t.GroupName=e.GroupName;if(e.ScheduleExpression)t.ScheduleExpression=e.ScheduleExpression;if(e.ScheduleExpressionTimezone)t.ScheduleExpressionTimezone=e.ScheduleExpressionTimezone;if(e.Description!==void 0)t.Description=e.Description;if(e.State)t.State=e.State;if(e.FlexibleTimeWindow)t.FlexibleTimeWindow=e.FlexibleTimeWindow;if(e.Target)t.Target=e.Target;return{ScheduleArn:(await this.client.request({service:"scheduler",region:this.region,method:"PUT",path:`/schedules/${encodeURIComponent(e.Name)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))?.ScheduleArn||""}}async deleteSchedule(e){let t={};if(e.GroupName)t.groupName=e.GroupName;await this.client.request({service:"scheduler",region:this.region,method:"DELETE",path:`/schedules/${encodeURIComponent(e.Name)}`,queryParams:Object.keys(t).length>0?t:void 0})}async listScheduleGroups(e){let t={};if(e?.NamePrefix)t.NamePrefix=e.NamePrefix;return{ScheduleGroups:(await this.client.request({service:"scheduler",region:this.region,method:"GET",path:"/schedule-groups",queryParams:Object.keys(t).length>0?t:void 0}))?.ScheduleGroups||[]}}}class va{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async registerScalableTarget(e){let t={ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension,MinCapacity:e.minCapacity,MaxCapacity:e.maxCapacity};if(e.roleARN)t.RoleARN=e.roleARN;if(e.suspendedState)t.SuspendedState={DynamicScalingInSuspended:e.suspendedState.dynamicScalingInSuspended,DynamicScalingOutSuspended:e.suspendedState.dynamicScalingOutSuspended,ScheduledScalingSuspended:e.suspendedState.scheduledScalingSuspended};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.RegisterScalableTarget","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeScalableTargets(e){let t={ServiceNamespace:e.serviceNamespace};if(e.resourceIds&&e.resourceIds.length>0)t.ResourceIds=e.resourceIds;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalableTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScalableTargets:r.ScalableTargets||[],NextToken:r.NextToken}}async deregisterScalableTarget(e){let t={ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeregisterScalableTarget","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async putScalingPolicy(e){let t={PolicyName:e.policyName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension,PolicyType:e.policyType};if(e.targetTrackingScalingPolicyConfiguration)t.TargetTrackingScalingPolicyConfiguration=e.targetTrackingScalingPolicyConfiguration;if(e.stepScalingPolicyConfiguration)t.StepScalingPolicyConfiguration=e.stepScalingPolicyConfiguration;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.PutScalingPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{PolicyARN:r.PolicyARN||"",Alarms:r.Alarms||[]}}async describeScalingPolicies(e){let t={ServiceNamespace:e.serviceNamespace};if(e.policyNames&&e.policyNames.length>0)t.PolicyNames=e.policyNames;if(e.resourceId)t.ResourceId=e.resourceId;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalingPolicies","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScalingPolicies:r.ScalingPolicies||[],NextToken:r.NextToken}}async deleteScalingPolicy(e){let t={PolicyName:e.policyName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeleteScalingPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async putScheduledAction(e){let t={ScheduledActionName:e.scheduledActionName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension,Schedule:e.schedule};if(e.timezone)t.Timezone=e.timezone;if(e.startTime)t.StartTime=e.startTime.toISOString();if(e.endTime)t.EndTime=e.endTime.toISOString();if(e.scalableTargetAction)t.ScalableTargetAction=e.scalableTargetAction;await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.PutScheduledAction","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeScheduledActions(e){let t={ServiceNamespace:e.serviceNamespace};if(e.scheduledActionNames&&e.scheduledActionNames.length>0)t.ScheduledActionNames=e.scheduledActionNames;if(e.resourceId)t.ResourceId=e.resourceId;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScheduledActions","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScheduledActions:r.ScheduledActions||[],NextToken:r.NextToken}}async deleteScheduledAction(e){let t={ScheduledActionName:e.scheduledActionName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeleteScheduledAction","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeScalingActivities(e){let t={ServiceNamespace:e.serviceNamespace};if(e.resourceId)t.ResourceId=e.resourceId;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;if(e.includeNotScaledActivities!==void 0)t.IncludeNotScaledActivities=e.includeNotScaledActivities;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalingActivities","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScalingActivities:r.ScalingActivities||[],NextToken:r.NextToken}}getECSServiceResourceId(e,t){return`service/${e}/${t}`}async registerECSServiceScaling(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);await this.registerScalableTarget({serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",minCapacity:e.minCapacity,maxCapacity:e.maxCapacity})}async createECSCPUScalingPolicy(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);return this.putScalingPolicy({policyName:e.policyName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:e.targetCPUPercent,PredefinedMetricSpecification:{PredefinedMetricType:"ECSServiceAverageCPUUtilization"},ScaleOutCooldown:e.scaleOutCooldown??300,ScaleInCooldown:e.scaleInCooldown??300,DisableScaleIn:e.disableScaleIn??!1}})}async createECSMemoryScalingPolicy(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);return this.putScalingPolicy({policyName:e.policyName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:e.targetMemoryPercent,PredefinedMetricSpecification:{PredefinedMetricType:"ECSServiceAverageMemoryUtilization"},ScaleOutCooldown:e.scaleOutCooldown??300,ScaleInCooldown:e.scaleInCooldown??300,DisableScaleIn:e.disableScaleIn??!1}})}async createECSRequestCountScalingPolicy(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName),r=e.targetGroupArn.split(":").pop()||"",i=e.loadBalancerArn.split(":").pop()||"",s=r.replace("targetgroup/",""),c=`${i.replace("loadbalancer/","")}/${s}`;return this.putScalingPolicy({policyName:e.policyName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:e.targetRequestsPerTarget,PredefinedMetricSpecification:{PredefinedMetricType:"ALBRequestCountPerTarget",ResourceLabel:c},ScaleOutCooldown:e.scaleOutCooldown??300,ScaleInCooldown:e.scaleInCooldown??300,DisableScaleIn:e.disableScaleIn??!1}})}async getECSServiceScalingPolicies(e,t){let r=this.getECSServiceResourceId(e,t);return(await this.describeScalingPolicies({serviceNamespace:"ecs",resourceId:r,scalableDimension:"ecs:service:DesiredCount"})).ScalingPolicies}async removeECSServiceScaling(e,t){let r=this.getECSServiceResourceId(e,t),i=await this.getECSServiceScalingPolicies(e,t);for(let s of i)await this.deleteScalingPolicy({policyName:s.PolicyName,serviceNamespace:"ecs",resourceId:r,scalableDimension:"ecs:service:DesiredCount"});await this.deregisterScalableTarget({serviceNamespace:"ecs",resourceId:r,scalableDimension:"ecs:service:DesiredCount"})}async createECSScheduledScaling(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);await this.putScheduledAction({scheduledActionName:e.actionName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",schedule:e.schedule,timezone:e.timezone,scalableTargetAction:{minCapacity:e.minCapacity,maxCapacity:e.maxCapacity}})}async getECSScalingActivities(e,t,r=20){let i=this.getECSServiceResourceId(e,t);return(await this.describeScalingActivities({serviceNamespace:"ecs",resourceId:i,scalableDimension:"ecs:service:DesiredCount",maxResults:r})).ScalingActivities.map((o)=>({ActivityId:o.ActivityId,Description:o.Description,Cause:o.Cause,StartTime:o.StartTime,EndTime:o.EndTime,StatusCode:o.StatusCode,StatusMessage:o.StatusMessage}))}}import*as G from"node:crypto";import*as q from"node:net";import*as D from"node:tls";import{readFileSync as P}from"node:fs";class ql{config;s3;server;tlsServer;sessions=new Map;messageCache=new Map;flagsCache=new Map;uidMappingCache=new Map;nextUidCache=new Map;cacheTimestamp=new Map;uidCounter=new Map;CACHE_TTL_MS=1e4;constructor(e){this.config={port:143,sslPort:993,host:"0.0.0.0",prefix:"incoming/",...e},this.s3=new a(e.region||"us-east-1")}async start(){if(this.server=q.createServer((e)=>{this.handleConnection(e)}),this.server.listen(this.config.port,this.config.host,()=>{console.log(`IMAP server listening on ${this.config.host}:${this.config.port}`)}),this.config.tls?.key&&this.config.tls?.cert){let e={key:P(this.config.tls.key),cert:P(this.config.tls.cert)};this.tlsServer=D.createServer(e,(t)=>{this.handleConnection(t)}),this.tlsServer.listen(this.config.sslPort,this.config.host,()=>{console.log(`IMAPS server listening on ${this.config.host}:${this.config.sslPort}`)})}}async stop(){if(this.server)this.server.close();if(this.tlsServer)this.tlsServer.close();for(let e of this.sessions.values())e.socket.destroy();this.sessions.clear()}handleConnection(e){let t=G.randomUUID(),r={id:t,socket:e,state:"not_authenticated"};this.sessions.set(t,r),this.send(r,`* OK [CAPABILITY IMAP4rev1 STARTTLS AUTH=PLAIN] ${this.config.domain} IMAP4rev1 ready`);let i="";e.on("data",async(s)=>{i+=s.toString();let o;while((o=i.indexOf(`\r
|
|
4
|
+
`),H=o.createHmac("sha256",`AWS4${s.secretAccessKey}`).update(l).digest(),W=o.createHmac("sha256",H).update(u).digest(),X=o.createHmac("sha256",W).update("bedrock-runtime").digest(),Q=o.createHmac("sha256",X).update("aws4_request").digest(),Y=o.createHmac("sha256",Q).update(O).digest("hex"),Z=`${I} Credential=${s.accessKeyId}/${A}, SignedHeaders=${S}, Signature=${Y}`;return{...p,Authorization:Z}}async invokeClaudeMessages(e){let t=e.modelId||"anthropic.claude-3-haiku-20240307-v1:0",r={anthropic_version:"bedrock-2023-05-31",max_tokens:e.maxTokens||1024,messages:e.messages};if(e.temperature!==void 0)r.temperature=e.temperature;if(e.topP!==void 0)r.top_p=e.topP;if(e.topK!==void 0)r.top_k=e.topK;if(e.stopSequences)r.stop_sequences=e.stopSequences;if(e.system)r.system=e.system;if(e.tools)r.tools=e.tools;if(e.toolChoice)r.tool_choice=e.toolChoice;return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(t)}/invoke`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)})}async converse(e){let t={modelId:e.modelId,messages:e.messages};if(e.system)t.system=e.system;if(e.inferenceConfig)t.inferenceConfig=e.inferenceConfig;if(e.toolConfig)t.toolConfig=e.toolConfig;if(e.guardrailConfig)t.guardrailConfig=e.guardrailConfig;return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(e.modelId)}/converse`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)})}async generateEmbeddings(e){let t=e.modelId||"amazon.titan-embed-text-v1",r;if(t.includes("cohere"))r={texts:Array.isArray(e.inputText)?e.inputText:[e.inputText],input_type:"search_document"};else if(t.includes("titan")){if(r={inputText:Array.isArray(e.inputText)?e.inputText[0]:e.inputText},e.dimensions)r.dimensions=e.dimensions;if(e.normalize!==void 0)r.normalize=e.normalize}else r={inputText:Array.isArray(e.inputText)?e.inputText[0]:e.inputText};return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/model/${encodeURIComponent(t)}/invoke`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)})}async applyGuardrail(e){return await this.client.request({service:"bedrock-runtime",region:this.region,method:"POST",path:`/guardrail/${encodeURIComponent(e.guardrailIdentifier)}/version/${encodeURIComponent(e.guardrailVersion)}/apply`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({source:e.source,content:e.content})})}}class on{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async listFoundationModels(e){let t={};if(e?.byProvider)t.byProvider=e.byProvider;if(e?.byCustomizationType)t.byCustomizationType=e.byCustomizationType;if(e?.byOutputModality)t.byOutputModality=e.byOutputModality;if(e?.byInferenceType)t.byInferenceType=e.byInferenceType;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/foundation-models",queryParams:Object.keys(t).length>0?t:void 0})}async getFoundationModel(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/foundation-models/${encodeURIComponent(e.modelIdentifier)}`})}async createModelCustomizationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-customization-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getModelCustomizationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-customization-jobs/${encodeURIComponent(e.jobIdentifier)}`})}async listModelCustomizationJobs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-customization-jobs",queryParams:Object.keys(t).length>0?t:void 0})}async stopModelCustomizationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/model-customization-jobs/${encodeURIComponent(e.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async listCustomModels(e){let t={};if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.baseModelArnEquals)t.baseModelArnEquals=e.baseModelArnEquals;if(e?.foundationModelArnEquals)t.foundationModelArnEquals=e.foundationModelArnEquals;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/custom-models",queryParams:Object.keys(t).length>0?t:void 0})}async getCustomModel(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/custom-models/${encodeURIComponent(e.modelIdentifier)}`})}async deleteCustomModel(e){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/custom-models/${encodeURIComponent(e.modelIdentifier)}`})}async requestModelAccess(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/foundation-model-entitlement",headers:{"Content-Type":"application/json"},body:JSON.stringify({modelId:e.modelId})})}async createGuardrail(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/guardrails",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getGuardrail(e){let t=`/guardrails/${encodeURIComponent(e.guardrailIdentifier)}`;if(e.guardrailVersion)t+=`?guardrailVersion=${encodeURIComponent(e.guardrailVersion)}`;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:t})}async listGuardrails(e){let t={};if(e?.guardrailIdentifier)t.guardrailIdentifier=e.guardrailIdentifier;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/guardrails",queryParams:Object.keys(t).length>0?t:void 0})}async deleteGuardrail(e){let t=`/guardrails/${encodeURIComponent(e.guardrailIdentifier)}`;if(e.guardrailVersion)t+=`?guardrailVersion=${encodeURIComponent(e.guardrailVersion)}`;return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:t})}async listModelInvocationJobs(e){let t={};if(e?.submitTimeAfter)t.submitTimeAfter=e.submitTimeAfter;if(e?.submitTimeBefore)t.submitTimeBefore=e.submitTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-invocation-jobs",queryParams:Object.keys(t).length>0?t:void 0})}async waitForModelCustomizationJob(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let o=await this.getModelCustomizationJob({jobIdentifier:e});if(o.status==="Completed"||o.status==="Failed"||o.status==="Stopped")return o;await new Promise((c)=>setTimeout(c,i))}throw Error(`Timeout waiting for model customization job ${e}`)}async requestAccessToModels(e){let t=[];for(let r of e)try{let i=await this.requestModelAccess({modelId:r});t.push({modelId:r,status:i.status})}catch(i){let s=i instanceof Error?i.message:String(i);t.push({modelId:r,status:"ERROR",error:s})}return t}async listModelsByProvider(e){return(await this.listFoundationModels({byProvider:e})).modelSummaries||[]}async listClaudeModels(){return this.listModelsByProvider("Anthropic")}async listEmbeddingModels(){return(await this.listFoundationModels({byOutputModality:"EMBEDDING"})).modelSummaries||[]}async createModelInvocationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-invocation-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getModelInvocationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-invocation-jobs/${encodeURIComponent(e.jobIdentifier)}`})}async stopModelInvocationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/model-invocation-jobs/${encodeURIComponent(e.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async createProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/provisioned-model-throughput",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/provisioned-model-throughput/${encodeURIComponent(e.provisionedModelId)}`})}async listProvisionedModelThroughputs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.modelArnEquals)t.modelArnEquals=e.modelArnEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/provisioned-model-throughput",queryParams:Object.keys(t).length>0?t:void 0})}async updateProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"PATCH",path:`/provisioned-model-throughput/${encodeURIComponent(e.provisionedModelId)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify({desiredProvisionedModelName:e.desiredProvisionedModelName,desiredModelId:e.desiredModelId})})}async deleteProvisionedModelThroughput(e){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/provisioned-model-throughput/${encodeURIComponent(e.provisionedModelId)}`})}async createEvaluationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/evaluation-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getEvaluationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/evaluation-jobs/${encodeURIComponent(e.jobIdentifier)}`})}async listEvaluationJobs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.nameContains)t.nameContains=e.nameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/evaluation-jobs",queryParams:Object.keys(t).length>0?t:void 0})}async stopEvaluationJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:`/evaluation-jobs/${encodeURIComponent(e.jobIdentifier)}/stop`,headers:{"Content-Type":"application/json"}})}async getInferenceProfile(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/inference-profiles/${encodeURIComponent(e.inferenceProfileIdentifier)}`})}async listInferenceProfiles(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.typeEquals)t.typeEquals=e.typeEquals;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/inference-profiles",queryParams:Object.keys(t).length>0?t:void 0})}async createInferenceProfile(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/inference-profiles",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteInferenceProfile(e){return this.client.request({service:"bedrock",region:this.region,method:"DELETE",path:`/inference-profiles/${encodeURIComponent(e.inferenceProfileIdentifier)}`})}async createModelCopyJob(e){return this.client.request({service:"bedrock",region:this.region,method:"POST",path:"/model-copy-jobs",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getModelCopyJob(e){return this.client.request({service:"bedrock",region:this.region,method:"GET",path:`/model-copy-jobs/${encodeURIComponent(e.jobArn)}`})}async listModelCopyJobs(e){let t={};if(e?.creationTimeAfter)t.creationTimeAfter=e.creationTimeAfter;if(e?.creationTimeBefore)t.creationTimeBefore=e.creationTimeBefore;if(e?.statusEquals)t.statusEquals=e.statusEquals;if(e?.sourceAccountEquals)t.sourceAccountEquals=e.sourceAccountEquals;if(e?.sourceModelArnEquals)t.sourceModelArnEquals=e.sourceModelArnEquals;if(e?.targetModelNameContains)t.targetModelNameContains=e.targetModelNameContains;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;if(e?.sortBy)t.sortBy=e.sortBy;if(e?.sortOrder)t.sortOrder=e.sortOrder;return this.client.request({service:"bedrock",region:this.region,method:"GET",path:"/model-copy-jobs",queryParams:Object.keys(t).length>0?t:void 0})}}class wm{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async invokeAgent(e){let t={inputText:e.inputText};if(e.endSession!==void 0)t.endSession=e.endSession;if(e.enableTrace!==void 0)t.enableTrace=e.enableTrace;if(e.memoryId)t.memoryId=e.memoryId;if(e.sessionState)t.sessionState=e.sessionState;return await this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:`/agents/${encodeURIComponent(e.agentId)}/agentAliases/${encodeURIComponent(e.agentAliasId)}/sessions/${encodeURIComponent(e.sessionId)}/text`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t)})}async retrieve(e){return this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/retrieve`,headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({retrievalQuery:e.retrievalQuery,retrievalConfiguration:e.retrievalConfiguration,nextToken:e.nextToken})})}async retrieveAndGenerate(e){return this.client.request({service:"bedrock-agent-runtime",region:this.region,method:"POST",path:"/retrieveAndGenerate",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)})}}class Rm{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createAgent(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:"/agents/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getAgent(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/agents/${encodeURIComponent(e.agentId)}/`})}async listAgents(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/agents/",queryParams:Object.keys(t).length>0?t:void 0})}async deleteAgent(e){let t={};if(e.skipResourceInUseCheck!==void 0)t.skipResourceInUseCheck=e.skipResourceInUseCheck.toString();return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/agents/${encodeURIComponent(e.agentId)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async prepareAgent(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/agents/${encodeURIComponent(e.agentId)}/`,headers:{"Content-Type":"application/json"}})}async createKnowledgeBase(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:"/knowledgebases/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getKnowledgeBase(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}`})}async listKnowledgeBases(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/knowledgebases/",queryParams:Object.keys(t).length>0?t:void 0})}async deleteKnowledgeBase(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}`})}async createDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}`})}async listDataSources(e){let t={};if(e.maxResults)t.maxResults=e.maxResults.toString();if(e.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/`,queryParams:Object.keys(t).length>0?t:void 0})}async updateDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteDataSource(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}`})}async startIngestionJob(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}/ingestionjobs/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({clientToken:e.clientToken,description:e.description})})}async getIngestionJob(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}/ingestionjobs/${encodeURIComponent(e.ingestionJobId)}`})}async listIngestionJobs(e){let t={};if(e.maxResults)t.maxResults=e.maxResults.toString();if(e.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/knowledgebases/${encodeURIComponent(e.knowledgeBaseId)}/datasources/${encodeURIComponent(e.dataSourceId)}/ingestionjobs/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({filters:e.filters,sortBy:e.sortBy,maxResults:e.maxResults,nextToken:e.nextToken})})}async createPrompt(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:"/prompts/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getPrompt(e){let t={};if(e.promptVersion)t.promptVersion=e.promptVersion;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/prompts/${encodeURIComponent(e.promptIdentifier)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async listPrompts(e){let t={};if(e?.promptIdentifier)t.promptIdentifier=e.promptIdentifier;if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/prompts/",queryParams:Object.keys(t).length>0?t:void 0})}async deletePrompt(e){let t={};if(e.promptVersion)t.promptVersion=e.promptVersion;return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/prompts/${encodeURIComponent(e.promptIdentifier)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async createPromptVersion(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/prompts/${encodeURIComponent(e.promptIdentifier)}/versions/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({description:e.description,clientToken:e.clientToken,tags:e.tags})})}async createFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:"/flows/",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`})}async listFlows(e){let t={};if(e?.maxResults)t.maxResults=e.maxResults.toString();if(e?.nextToken)t.nextToken=e.nextToken;return this.client.request({service:"bedrock-agent",region:this.region,method:"GET",path:"/flows/",queryParams:Object.keys(t).length>0?t:void 0})}async updateFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"PUT",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async deleteFlow(e){let t={};if(e.skipResourceInUseCheck!==void 0)t.skipResourceInUseCheck=e.skipResourceInUseCheck.toString();return this.client.request({service:"bedrock-agent",region:this.region,method:"DELETE",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`,queryParams:Object.keys(t).length>0?t:void 0})}async prepareFlow(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/`,headers:{"Content-Type":"application/json"}})}async createFlowVersion(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/versions/`,headers:{"Content-Type":"application/json"},body:JSON.stringify({description:e.description,clientToken:e.clientToken})})}async createFlowAlias(e){return this.client.request({service:"bedrock-agent",region:this.region,method:"POST",path:`/flows/${encodeURIComponent(e.flowIdentifier)}/aliases/`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}async function PA(e,t="us-east-1"){return new on(t).requestAccessToModels(e)}async function NA(e="us-east-1"){return new on(e).listClaudeModels()}async function kA(e,t){let s=(await new sn(t?.region||"us-east-1").invokeClaudeMessages({modelId:t?.modelId||"anthropic.claude-3-haiku-20240307-v1:0",messages:[{role:"user",content:e}],maxTokens:t?.maxTokens||1024,temperature:t?.temperature})).content.find((o)=>o.type==="text");return s?.type==="text"?s.text:""}async function BA(e,t){let i=await new sn(t?.region||"us-east-1").generateEmbeddings({modelId:t?.modelId||"amazon.titan-embed-text-v1",inputText:e});return i.embeddings||i.embedding||[]}class yt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"comprehend",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Comprehend_20171127.${e}`},body:JSON.stringify(t)})}async detectSentiment(e){return this.request("DetectSentiment",e)}async detectEntities(e){return this.request("DetectEntities",e)}async detectKeyPhrases(e){return this.request("DetectKeyPhrases",e)}async detectDominantLanguage(e){return this.request("DetectDominantLanguage",e)}async detectPiiEntities(e){return this.request("DetectPiiEntities",e)}async containsPiiEntities(e){return this.request("ContainsPiiEntities",e)}async detectSyntax(e){return this.request("DetectSyntax",e)}async detectTargetedSentiment(e){return this.request("DetectTargetedSentiment",e)}async classifyDocument(e){return this.request("ClassifyDocument",e)}async batchDetectSentiment(e){return this.request("BatchDetectSentiment",e)}async batchDetectEntities(e){return this.request("BatchDetectEntities",e)}async batchDetectKeyPhrases(e){return this.request("BatchDetectKeyPhrases",e)}async batchDetectDominantLanguage(e){return this.request("BatchDetectDominantLanguage",e)}async batchDetectSyntax(e){return this.request("BatchDetectSyntax",e)}async startSentimentDetectionJob(e){return this.request("StartSentimentDetectionJob",e)}async startEntitiesDetectionJob(e){return this.request("StartEntitiesDetectionJob",e)}async startKeyPhrasesDetectionJob(e){return this.request("StartKeyPhrasesDetectionJob",e)}async startPiiEntitiesDetectionJob(e){return this.request("StartPiiEntitiesDetectionJob",e)}async describeSentimentDetectionJob(e){return this.request("DescribeSentimentDetectionJob",e)}async analyzeSentiment(e,t="en"){let r=await this.detectSentiment({Text:e,LanguageCode:t});return{sentiment:r.Sentiment,scores:{positive:r.SentimentScore.Positive,negative:r.SentimentScore.Negative,neutral:r.SentimentScore.Neutral,mixed:r.SentimentScore.Mixed}}}async extractEntities(e,t="en"){return(await this.detectEntities({Text:e,LanguageCode:t})).Entities.map((i)=>({text:i.Text||"",type:i.Type||"UNKNOWN",score:i.Score||0}))}async extractKeyPhrases(e,t="en"){return(await this.detectKeyPhrases({Text:e,LanguageCode:t})).KeyPhrases.map((i)=>i.Text||"").filter(Boolean)}async detectLanguage(e){let r=(await this.detectDominantLanguage({Text:e})).Languages[0];return{languageCode:r?.LanguageCode||"unknown",confidence:r?.Score||0}}async findPii(e,t="en"){return(await this.detectPiiEntities({Text:e,LanguageCode:t})).Entities.map((i)=>({type:i.Type||"UNKNOWN",beginOffset:i.BeginOffset||0,endOffset:i.EndOffset||0,score:i.Score||0}))}async hasPii(e,t="en"){return(await this.detectPiiEntities({Text:e,LanguageCode:t})).Entities.length>0}async redactPii(e,t="en"){let i=[...(await this.detectPiiEntities({Text:e,LanguageCode:t})).Entities].sort((o,c)=>(c.EndOffset||0)-(o.EndOffset||0)),s=e;for(let o of i)if(o.BeginOffset!==void 0&&o.EndOffset!==void 0)s=s.slice(0,o.BeginOffset)+`[${o.Type}]`+s.slice(o.EndOffset);return s}}async function xA(e,t){let i=await new yt(t?.region||"us-east-1").analyzeSentiment(e,t?.languageCode||"en"),s=Math.max(i.scores.positive,i.scores.negative,i.scores.neutral,i.scores.mixed);return{sentiment:i.sentiment,confidence:s}}async function _A(e,t){return new yt(t?.region||"us-east-1").extractEntities(e,t?.languageCode||"en")}async function OA(e,t){return(await new yt(t||"us-east-1").detectLanguage(e)).languageCode}async function LA(e,t){return new yt(t?.region||"us-east-1").hasPii(e,t?.languageCode||"en")}class It{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"rekognition",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`RekognitionService.${e}`},body:JSON.stringify(t)})}async detectFaces(e){return this.request("DetectFaces",e)}async detectLabels(e){return this.request("DetectLabels",e)}async detectText(e){return this.request("DetectText",e)}async detectModerationLabels(e){return this.request("DetectModerationLabels",e)}async recognizeCelebrities(e){return this.request("RecognizeCelebrities",e)}async compareFaces(e){return this.request("CompareFaces",e)}async createCollection(e){return this.request("CreateCollection",e)}async deleteCollection(e){return this.request("DeleteCollection",e)}async listCollections(e){return this.request("ListCollections",e||{})}async indexFaces(e){return this.request("IndexFaces",e)}async searchFacesByImage(e){return this.request("SearchFacesByImage",e)}async searchFaces(e){return this.request("SearchFaces",e)}async startLabelDetection(e){return this.request("StartLabelDetection",e)}async getLabelDetection(e){return this.request("GetLabelDetection",e)}async startFaceDetection(e){return this.request("StartFaceDetection",e)}async getFaceDetection(e){return this.request("GetFaceDetection",e)}async startContentModeration(e){return this.request("StartContentModeration",e)}async getContentModeration(e){return this.request("GetContentModeration",e)}async analyzeS3Image(e,t,r){return(await this.detectLabels({Image:{S3Object:{Bucket:e,Name:t}},MaxLabels:r?.maxLabels,MinConfidence:r?.minConfidence})).Labels||[]}async analyzeImageBytes(e,t){return(await this.detectLabels({Image:{Bytes:e},MaxLabels:t?.maxLabels,MinConfidence:t?.minConfidence})).Labels||[]}async isImageSafe(e,t=50){return((await this.detectModerationLabels({Image:e,MinConfidence:t})).ModerationLabels?.length||0)===0}async countFaces(e){return(await this.detectFaces({Image:e,Attributes:["DEFAULT"]})).FaceDetails?.length||0}async extractText(e){return(await this.detectText({Image:e})).TextDetections?.filter((r)=>r.Type==="LINE").map((r)=>r.DetectedText||"")||[]}async findFace(e,t,r=80){try{return(await this.searchFacesByImage({CollectionId:e,Image:t,FaceMatchThreshold:r,MaxFaces:1})).FaceMatches?.[0]||null}catch(i){if(i instanceof Error&&i.message.includes("InvalidParameterException"))return null;throw i}}}async function Dm(e,t,r){return(await new It(r?.region||"us-east-1").analyzeS3Image(e,t,{maxLabels:r?.maxLabels})).map((o)=>o.Name||"").filter(Boolean)}async function Pm(e,t,r){return new It(r||"us-east-1").countFaces({S3Object:{Bucket:e,Name:t}})}async function Nm(e,t,r){return new It(r?.region||"us-east-1").isImageSafe({S3Object:{Bucket:e,Name:t}},r?.threshold)}class St{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"textract",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`Textract.${e}`},body:JSON.stringify(t)})}async detectDocumentText(e){return this.request("DetectDocumentText",e)}async analyzeDocument(e){return this.request("AnalyzeDocument",e)}async analyzeExpense(e){return this.request("AnalyzeExpense",e)}async analyzeID(e){return this.request("AnalyzeID",e)}async startDocumentTextDetection(e){return this.request("StartDocumentTextDetection",e)}async getDocumentTextDetection(e){return this.request("GetDocumentTextDetection",e)}async startDocumentAnalysis(e){return this.request("StartDocumentAnalysis",e)}async getDocumentAnalysis(e){return this.request("GetDocumentAnalysis",e)}async startExpenseAnalysis(e){return this.request("StartExpenseAnalysis",e)}async getExpenseAnalysis(e){return this.request("GetExpenseAnalysis",e)}async startLendingAnalysis(e){return this.request("StartLendingAnalysis",e)}async getLendingAnalysis(e){return this.request("GetLendingAnalysis",e)}async extractText(e){return(await this.detectDocumentText({Document:e})).Blocks?.filter((r)=>r.BlockType==="LINE").map((r)=>r.Text||"")||[]}async extractTextFromS3(e,t){return this.extractText({S3Object:{Bucket:e,Name:t}})}async extractForms(e){let r=(await this.analyzeDocument({Document:e,FeatureTypes:["FORMS"]})).Blocks||[],i=new Map;r.forEach((o)=>o.Id&&i.set(o.Id,o));let s=[];for(let o of r)if(o.BlockType==="KEY_VALUE_SET"&&o.EntityTypes?.includes("KEY")){let c=this.getBlockText(o,i),u=o.Relationships?.find((m)=>m.Type==="VALUE"),g="";if(u?.Ids)for(let m of u.Ids){let d=i.get(m);if(d)g+=this.getBlockText(d,i)+" "}s.push({key:c.trim(),value:g.trim(),confidence:o.Confidence||0})}return s}async extractTables(e){let r=(await this.analyzeDocument({Document:e,FeatureTypes:["TABLES"]})).Blocks||[],i=new Map;r.forEach((o)=>o.Id&&i.set(o.Id,o));let s=[];for(let o of r)if(o.BlockType==="TABLE"){let u=(o.Relationships?.find((l)=>l.Type==="CHILD")?.Ids||[]).map((l)=>i.get(l)).filter(Boolean),g=0,m=0;for(let l of u){if(l.RowIndex&&l.RowIndex>g)g=l.RowIndex;if(l.ColumnIndex&&l.ColumnIndex>m)m=l.ColumnIndex}let d=Array.from({length:g},()=>Array.from({length:m},()=>""));for(let l of u)if(l.RowIndex&&l.ColumnIndex)d[l.RowIndex-1][l.ColumnIndex-1]=this.getBlockText(l,i);s.push({rows:d})}return s}async extractExpenseSummary(e){let r=(await this.analyzeExpense({Document:e})).ExpenseDocuments?.[0];if(!r)return{items:[]};let i={};for(let o of r.SummaryFields||[]){let c=o.Type?.Text?.toUpperCase(),u=o.ValueDetection?.Text;if(c==="VENDOR_NAME")i.vendor=u;if(c==="TOTAL")i.total=u;if(c==="INVOICE_RECEIPT_DATE")i.date=u}let s=[];for(let o of r.LineItemGroups||[])for(let c of o.LineItems||[]){let u={};for(let g of c.LineItemExpenseFields||[]){let m=g.Type?.Text?.toUpperCase(),d=g.ValueDetection?.Text;if(m==="ITEM")u.description=d;if(m==="QUANTITY")u.quantity=d;if(m==="PRICE")u.price=d}if(u.description||u.price)s.push(u)}return{...i,items:s}}async queryDocument(e,t){let i=(await this.analyzeDocument({Document:e,FeatureTypes:["QUERIES"],QueriesConfig:{Queries:t.map((o)=>({Text:o}))}})).Blocks||[],s=[];for(let o of i)if(o.BlockType==="QUERY_RESULT"&&o.Text){let c=i.find((u)=>u.BlockType==="QUERY"&&u.Relationships?.some((g)=>g.Type==="ANSWER"&&g.Ids?.includes(o.Id||"")));s.push({question:c?.Query?.Text||"",answer:o.Text,confidence:o.Confidence||0})}return s}async waitForJob(e,t,r){let i=r?.maxWaitMs??300000,s=r?.pollIntervalMs??5000,o=Date.now();while(Date.now()-o<i){let c=await t(e);if(c.JobStatus==="SUCCEEDED"||c.JobStatus==="PARTIAL_SUCCESS")return;if(c.JobStatus==="FAILED")throw Error(`Textract job ${e} failed`);await new Promise((u)=>setTimeout(u,s))}throw Error(`Timeout waiting for Textract job ${e}`)}getBlockText(e,t){if(e.Text)return e.Text;return(e.Relationships?.find((i)=>i.Type==="CHILD")?.Ids||[]).map((i)=>t.get(i)?.Text||"").join(" ")}}async function km(e,t,r){return(await new St(r||"us-east-1").extractTextFromS3(e,t)).join(`
|
|
5
|
+
`)}async function Bm(e,t,r){let s=await new St(r||"us-east-1").extractForms({S3Object:{Bucket:e,Name:t}});return Object.fromEntries(s.map((o)=>[o.key,o.value]))}async function xm(e,t,r){return(await new St(r||"us-east-1").extractTables({S3Object:{Bucket:e,Name:t}})).map((o)=>o.rows)}class an{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async synthesizeSpeech(e){let t=await this.client.request({service:"polly",region:this.region,method:"POST",path:"/v1/speech",headers:{"Content-Type":"application/json"},body:JSON.stringify({Engine:e.Engine,LanguageCode:e.LanguageCode,LexiconNames:e.LexiconNames,OutputFormat:e.OutputFormat,SampleRate:e.SampleRate,SpeechMarkTypes:e.SpeechMarkTypes,Text:e.Text,TextType:e.TextType,VoiceId:e.VoiceId}),rawResponse:!0,returnHeaders:!0});return{AudioStream:new TextEncoder().encode(t.body),ContentType:t.headers?.["content-type"],RequestCharacters:t.headers?.["x-amzn-requestcharacters"]?Number.parseInt(t.headers["x-amzn-requestcharacters"]):void 0}}async startSpeechSynthesisTask(e){return this.client.request({service:"polly",region:this.region,method:"POST",path:"/v1/synthesisTasks",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}async getSpeechSynthesisTask(e){return this.client.request({service:"polly",region:this.region,method:"GET",path:`/v1/synthesisTasks/${encodeURIComponent(e.TaskId)}`})}async listSpeechSynthesisTasks(e){let t={};if(e?.MaxResults)t.MaxResults=e.MaxResults.toString();if(e?.NextToken)t.NextToken=e.NextToken;if(e?.Status)t.Status=e.Status;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/synthesisTasks",queryParams:Object.keys(t).length>0?t:void 0})}async describeVoices(e){let t={};if(e?.Engine)t.Engine=e.Engine;if(e?.LanguageCode)t.LanguageCode=e.LanguageCode;if(e?.IncludeAdditionalLanguageCodes!==void 0)t.IncludeAdditionalLanguageCodes=e.IncludeAdditionalLanguageCodes.toString();if(e?.NextToken)t.NextToken=e.NextToken;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/voices",queryParams:Object.keys(t).length>0?t:void 0})}async putLexicon(e){return this.client.request({service:"polly",region:this.region,method:"PUT",path:`/v1/lexicons/${encodeURIComponent(e.Name)}`,headers:{"Content-Type":"application/pls+xml"},body:e.Content})}async getLexicon(e){return this.client.request({service:"polly",region:this.region,method:"GET",path:`/v1/lexicons/${encodeURIComponent(e.Name)}`})}async deleteLexicon(e){return this.client.request({service:"polly",region:this.region,method:"DELETE",path:`/v1/lexicons/${encodeURIComponent(e.Name)}`})}async listLexicons(e){let t={};if(e?.NextToken)t.NextToken=e.NextToken;return this.client.request({service:"polly",region:this.region,method:"GET",path:"/v1/lexicons",queryParams:Object.keys(t).length>0?t:void 0})}async textToSpeech(e,t){return(await this.synthesizeSpeech({Text:e,VoiceId:t?.voiceId||"Joanna",Engine:t?.engine||"neural",LanguageCode:t?.languageCode,OutputFormat:"mp3"})).AudioStream||new Uint8Array}async ssmlToSpeech(e,t){return(await this.synthesizeSpeech({Text:e,TextType:"ssml",VoiceId:t?.voiceId||"Joanna",Engine:t?.engine||"neural",LanguageCode:t?.languageCode,OutputFormat:"mp3"})).AudioStream||new Uint8Array}async saveToS3(e,t,r,i){let s=await this.startSpeechSynthesisTask({Text:e,TextType:i?.textType||"text",VoiceId:i?.voiceId||"Joanna",Engine:i?.engine||"neural",LanguageCode:i?.languageCode,OutputFormat:"mp3",OutputS3BucketName:t,OutputS3KeyPrefix:r});return{taskId:s.SynthesisTask?.TaskId||"",outputUri:s.SynthesisTask?.OutputUri||""}}async listVoicesForLanguage(e){return(await this.describeVoices({LanguageCode:e})).Voices||[]}async listNeuralVoices(){return(await this.describeVoices({Engine:"neural"})).Voices||[]}async waitForTask(e,t){let r=t?.maxWaitMs??300000,i=t?.pollIntervalMs??5000,s=Date.now();while(Date.now()-s<r){let c=(await this.getSpeechSynthesisTask({TaskId:e})).SynthesisTask;if(c?.TaskStatus==="completed")return c;if(c?.TaskStatus==="failed")throw Error(`Polly task ${e} failed: ${c.TaskStatusReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for Polly task ${e}`)}}async function $A(e,t){return new an(t?.region||"us-east-1").textToSpeech(e,t)}async function MA(e){return(await new an(e?.region||"us-east-1").describeVoices({LanguageCode:e?.languageCode,Engine:e?.engine})).Voices||[]}function FA(e,t){let r="<speak>";if(t?.rate||t?.pitch||t?.volume){if(r+="<prosody",t.rate)r+=` rate="${t.rate}"`;if(t.pitch)r+=` pitch="${t.pitch}"`;if(t.volume)r+=` volume="${t.volume}"`;r+=`>${e}</prosody>`}else r+=e;return r+="</speak>",r}class Xt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"translate",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSShineFrontendService_20170701.${e}`},body:JSON.stringify(t)})}async translateText(e){return this.request("TranslateText",e)}async translateDocument(e){return this.request("TranslateDocument",e)}async startTextTranslationJob(e){return this.request("StartTextTranslationJob",e)}async describeTextTranslationJob(e){return this.request("DescribeTextTranslationJob",e)}async listTextTranslationJobs(e){return this.request("ListTextTranslationJobs",e||{})}async stopTextTranslationJob(e){return this.request("StopTextTranslationJob",e)}async listLanguages(e){return this.request("ListLanguages",e||{})}async importTerminology(e){return this.request("ImportTerminology",e)}async getTerminology(e){return this.request("GetTerminology",e)}async listTerminologies(e){return this.request("ListTerminologies",e||{})}async deleteTerminology(e){return this.request("DeleteTerminology",e)}async createParallelData(e){return this.request("CreateParallelData",e)}async getParallelData(e){return this.request("GetParallelData",e)}async listParallelData(e){return this.request("ListParallelData",e||{})}async deleteParallelData(e){return this.request("DeleteParallelData",e)}async translate(e,t,r="auto"){return(await this.translateText({Text:e,SourceLanguageCode:r,TargetLanguageCode:t})).TranslatedText}async translateFormal(e,t,r="auto",i="FORMAL"){return(await this.translateText({Text:e,SourceLanguageCode:r,TargetLanguageCode:t,Settings:{Formality:i}})).TranslatedText}async translateToMultiple(e,t,r="auto"){let i={};for(let s of t)i[s]=await this.translate(e,s,r);return i}async waitForJob(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeTextTranslationJob({JobId:e})).TextTranslationJobProperties;if(c?.JobStatus==="COMPLETED"||c?.JobStatus==="COMPLETED_WITH_ERROR")return c;if(c?.JobStatus==="FAILED"||c?.JobStatus==="STOPPED")throw Error(`Translation job ${e} failed: ${c.Message}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for translation job ${e}`)}async getSupportedLanguages(){return(await this.listLanguages()).Languages?.map((t)=>t.LanguageCode||"").filter(Boolean)||[]}}async function UA(e,t,r){return new Xt(r?.region||"us-east-1").translate(e,t,r?.sourceLanguage||"auto")}async function QA(e,t,r){return new Xt(r?.region||"us-east-1").translateToMultiple(e,t,r?.sourceLanguage||"auto")}async function HA(e){return(await new Xt(e||"us-east-1").listLanguages()).Languages||[]}class Ea{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"personalize",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalize.${e}`},body:JSON.stringify(t)})}async createDatasetGroup(e){return this.request("CreateDatasetGroup",e)}async describeDatasetGroup(e){return this.request("DescribeDatasetGroup",e)}async listDatasetGroups(e){return this.request("ListDatasetGroups",e||{})}async createSchema(e){return this.request("CreateSchema",e)}async createDataset(e){return this.request("CreateDataset",e)}async createDatasetImportJob(e){return this.request("CreateDatasetImportJob",e)}async describeDatasetImportJob(e){return this.request("DescribeDatasetImportJob",e)}async createSolution(e){return this.request("CreateSolution",e)}async createSolutionVersion(e){return this.request("CreateSolutionVersion",e)}async describeSolutionVersion(e){return this.request("DescribeSolutionVersion",e)}async createCampaign(e){return this.request("CreateCampaign",e)}async describeCampaign(e){return this.request("DescribeCampaign",e)}async createRecommender(e){return this.request("CreateRecommender",e)}async describeRecommender(e){return this.request("DescribeRecommender",e)}async listRecommenders(e){return this.request("ListRecommenders",e||{})}async createEventTracker(e){return this.request("CreateEventTracker",e)}async describeEventTracker(e){return this.request("DescribeEventTracker",e)}async createFilter(e){return this.request("CreateFilter",e)}async listRecipes(e){return this.request("ListRecipes",e||{})}async waitForSolutionVersion(e,t){let r=t?.maxWaitMs??7200000,i=t?.pollIntervalMs??60000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeSolutionVersion({solutionVersionArn:e})).solutionVersion;if(c?.status==="ACTIVE")return c;if(c?.status==="CREATE FAILED")throw Error(`Solution version failed: ${c.failureReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for solution version ${e}`)}async waitForCampaign(e,t){let r=t?.maxWaitMs??1800000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeCampaign({campaignArn:e})).campaign;if(c?.status==="ACTIVE")return c;if(c?.status==="CREATE FAILED")throw Error(`Campaign failed: ${c.failureReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for campaign ${e}`)}async waitForDatasetImportJob(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let c=(await this.describeDatasetImportJob({datasetImportJobArn:e})).datasetImportJob;if(c?.status==="ACTIVE")return c;if(c?.status==="CREATE FAILED")throw Error(`Dataset import job failed: ${c.failureReason}`);await new Promise((u)=>setTimeout(u,i))}throw Error(`Timeout waiting for dataset import job ${e}`)}}class va{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"personalize-runtime",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalizeRuntime.${e}`},body:JSON.stringify(t)})}async getRecommendations(e){return this.request("GetRecommendations",e)}async getPersonalizedRanking(e){return this.request("GetPersonalizedRanking",e)}async recommendForUser(e,t,r=10){return(await this.getRecommendations({campaignArn:e,userId:t,numResults:r})).itemList?.map((s)=>s.itemId||"").filter(Boolean)||[]}async getSimilarItems(e,t,r=10){return(await this.getRecommendations({campaignArn:e,itemId:t,numResults:r})).itemList?.map((s)=>s.itemId||"").filter(Boolean)||[]}async rankItems(e,t,r){return(await this.getPersonalizedRanking({campaignArn:e,userId:t,inputList:r})).personalizedRanking?.map((s)=>s.itemId||"").filter(Boolean)||[]}}class Gl{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"personalize-events",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AmazonPersonalizeEvents.${e}`},body:JSON.stringify(t)})}async putEvents(e){return this.request("PutEvents",e)}async putItems(e){return this.request("PutItems",e)}async putUsers(e){return this.request("PutUsers",e)}async trackEvent(e,t,r,i,s="click"){await this.putEvents({trackingId:e,sessionId:t,userId:r,eventList:[{eventType:s,itemId:i,sentAt:new Date().toISOString()}]})}async trackPurchase(e,t,r,i,s){await this.putEvents({trackingId:e,sessionId:t,userId:r,eventList:[{eventType:"purchase",eventValue:s,itemId:i,sentAt:new Date().toISOString()}]})}}async function GA(e,t,r){return new va(r?.region||"us-east-1").recommendForUser(e,t,r?.numResults)}async function qA(e,t,r){return new va(r?.region||"us-east-1").getSimilarItems(e,t,r?.numResults)}async function VA(e,t,r,i,s="click",o){await new Gl(o||"us-east-1").trackEvent(e,t,r,i,s)}class Yt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){return this.client.request({service:"kendra",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":`AWSKendraFrontendService.${e}`},body:JSON.stringify(t)})}async createIndex(e){return this.request("CreateIndex",e)}async describeIndex(e){return this.request("DescribeIndex",e)}async listIndices(e){return this.request("ListIndices",e||{})}async deleteIndex(e){return this.request("DeleteIndex",e)}async createDataSource(e){return this.request("CreateDataSource",e)}async describeDataSource(e){return this.request("DescribeDataSource",e)}async listDataSources(e){return this.request("ListDataSources",e)}async startDataSourceSyncJob(e){return this.request("StartDataSourceSyncJob",e)}async stopDataSourceSyncJob(e){return this.request("StopDataSourceSyncJob",e)}async query(e){return this.request("Query",e)}async retrieve(e){return this.request("Retrieve",e)}async batchPutDocument(e){return this.request("BatchPutDocument",e)}async batchDeleteDocument(e){return this.request("BatchDeleteDocument",e)}async search(e,t,r){return(await this.query({IndexId:e,QueryText:t,PageSize:r?.pageSize,PageNumber:r?.pageNumber,AttributeFilter:r?.attributeFilter})).ResultItems||[]}async retrieveDocuments(e,t,r){return(await this.retrieve({IndexId:e,QueryText:t,PageSize:r?.pageSize,PageNumber:r?.pageNumber})).ResultItems||[]}async addDocument(e,t){let r=t.attributes?Object.entries(t.attributes).map(([s,o])=>({Key:s,Value:typeof o==="number"?{LongValue:o}:Array.isArray(o)?{StringListValue:o}:{StringValue:o}})):void 0,i=await this.batchPutDocument({IndexId:e,Documents:[{Id:t.id,Title:t.title,Blob:new TextEncoder().encode(t.content),ContentType:"PLAIN_TEXT",Attributes:r}]});if(i.FailedDocuments?.length)throw Error(`Failed to add document: ${i.FailedDocuments[0].ErrorMessage}`)}async addDocuments(e,t){let r=t.map((o)=>{let c=o.attributes?Object.entries(o.attributes).map(([u,g])=>({Key:u,Value:typeof g==="number"?{LongValue:g}:Array.isArray(g)?{StringListValue:g}:{StringValue:g}})):void 0;return{Id:o.id,Title:o.title,Blob:new TextEncoder().encode(o.content),ContentType:"PLAIN_TEXT",Attributes:c}}),s=(await this.batchPutDocument({IndexId:e,Documents:r})).FailedDocuments?.map((o)=>({id:o.Id||"unknown",error:o.ErrorMessage||"Unknown error"}))||[];return{succeeded:t.length-s.length,failed:s}}async deleteDocuments(e,t){let r=await this.batchDeleteDocument({IndexId:e,DocumentIdList:t});if(r.FailedDocuments?.length)throw Error(`Failed to delete documents: ${r.FailedDocuments.map((i)=>i.Id).join(", ")}`)}async waitForIndex(e,t){let r=t?.maxWaitMs??3600000,i=t?.pollIntervalMs??30000,s=Date.now();while(Date.now()-s<r){let o=await this.describeIndex({Id:e});if(o.Status==="ACTIVE")return o;if(o.Status==="FAILED")throw Error(`Index creation failed: ${o.ErrorMessage}`);await new Promise((c)=>setTimeout(c,i))}throw Error(`Timeout waiting for index ${e}`)}async waitForDataSource(e,t,r){let i=r?.maxWaitMs??1800000,s=r?.pollIntervalMs??30000,o=Date.now();while(Date.now()-o<i){let c=await this.describeDataSource({Id:t,IndexId:e});if(c.Status==="ACTIVE")return c;if(c.Status==="FAILED")throw Error(`Data source creation failed: ${c.ErrorMessage}`);await new Promise((u)=>setTimeout(u,s))}throw Error(`Timeout waiting for data source ${t}`)}}async function _m(e,t,r){return(await new Yt(r?.region||"us-east-1").search(e,t,{pageSize:r?.pageSize})).map((o)=>({title:o.DocumentTitle?.Text||"",excerpt:o.DocumentExcerpt?.Text||"",uri:o.DocumentURI||"",score:o.ScoreAttributes?.ScoreConfidence||"NOT_AVAILABLE"}))}async function Om(e,t,r){return(await new Yt(r?.region||"us-east-1").retrieveDocuments(e,t,{pageSize:r?.pageSize})).map((o)=>({content:o.Content||"",uri:o.DocumentURI||"",score:o.ScoreAttributes?.ScoreConfidence||"NOT_AVAILABLE"}))}class Zt{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async request(e,t){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.${e}`},body:JSON.stringify(t)})}async putRule(e){return this.request("PutRule",e)}async deleteRule(e){return this.request("DeleteRule",e)}async describeRule(e){return this.request("DescribeRule",e)}async listRules(e){return this.request("ListRules",e||{})}async listEventBuses(e){return this.request("ListEventBuses",e||{})}async enableRule(e){return this.request("EnableRule",e)}async disableRule(e){return this.request("DisableRule",e)}async putTargets(e){return this.request("PutTargets",e)}async removeTargets(e){return this.request("RemoveTargets",e)}async listTargetsByRule(e){return this.request("ListTargetsByRule",e)}async putEvents(e){return this.request("PutEvents",e)}async createSchedule(e){return this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${e.Name}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}class Je{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async describeCacheClusters(e){let t={Action:"DescribeCacheClusters",Version:"2015-02-02",ShowCacheNodeInfo:"true"};if(e)t.CacheClusterId=e;let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{CacheClusters:this.parseCacheClusters(r)}}async describeReplicationGroups(e){let t={Action:"DescribeReplicationGroups",Version:"2015-02-02"};if(e)t.ReplicationGroupId=e;let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{ReplicationGroups:[]}}async createCacheCluster(e){let t={Action:"CreateCacheCluster",Version:"2015-02-02",CacheClusterId:e.cacheClusterId,Engine:e.engine,CacheNodeType:e.cacheNodeType};if(e.numCacheNodes)t.NumCacheNodes=e.numCacheNodes;if(e.engineVersion)t.EngineVersion=e.engineVersion;if(e.port)t.Port=e.port;if(e.securityGroupIds&&e.securityGroupIds.length>0)e.securityGroupIds.forEach((i,s)=>{t[`SecurityGroupIds.member.${s+1}`]=i});if(e.subnetGroupName)t.CacheSubnetGroupName=e.subnetGroupName;if(e.tags&&e.tags.length>0)e.tags.forEach((i,s)=>{t[`Tags.member.${s+1}.Key`]=i.Key,t[`Tags.member.${s+1}.Value`]=i.Value});let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{CacheCluster:this.parseCacheCluster(r)}}async deleteCacheCluster(e,t){let r={Action:"DeleteCacheCluster",Version:"2015-02-02",CacheClusterId:e};if(t)r.FinalSnapshotIdentifier=t;await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}async rebootCacheCluster(e,t){let r={Action:"RebootCacheCluster",Version:"2015-02-02",CacheClusterId:e};t.forEach((i,s)=>{r[`CacheNodeIdsToReboot.member.${s+1}`]=i}),await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(r).toString()})}async describeCacheEngineVersions(e){let t={Action:"DescribeCacheEngineVersions",Version:"2015-02-02"};if(e)t.Engine=e;let r=await this.client.request({service:"elasticache",region:this.region,method:"POST",path:"/",body:new URLSearchParams(t).toString()});return{CacheEngineVersions:[]}}async getCacheStatistics(e){let t=await this.describeCacheClusters(e);if(!t.CacheClusters||t.CacheClusters.length===0)throw Error(`Cache cluster ${e} not found`);return{cpuUtilization:0,evictions:0,hits:0,misses:0,connections:0}}parseCacheClusters(e){if(e.CacheClusterId)return[{CacheClusterId:e.CacheClusterId,CacheClusterStatus:e.CacheClusterStatus||"available",Engine:e.Engine||"redis",EngineVersion:e.EngineVersion||"7.0",CacheNodeType:e.CacheNodeType||"cache.t3.micro",NumCacheNodes:Number.parseInt(e.NumCacheNodes||"1"),CacheClusterCreateTime:e.CacheClusterCreateTime||new Date().toISOString()}];return[]}parseCacheCluster(e){return{CacheClusterId:e.CacheClusterId,CacheClusterStatus:e.CacheClusterStatus||"creating",Engine:e.Engine||"redis",EngineVersion:e.EngineVersion||"7.0",CacheNodeType:e.CacheNodeType||"cache.t3.micro",NumCacheNodes:Number.parseInt(e.NumCacheNodes||"1"),CacheClusterCreateTime:e.CacheClusterCreateTime||new Date().toISOString()}}}class cn{client;region;constructor(e="us-east-1",t){this.region=e,this.client=new n}async createRule(e){let t={Action:"PutRule",Name:e.name,ScheduleExpression:e.scheduleExpression,Version:"2015-10-07"};if(e.description)t.Description=e.description;if(e.state)t.State=e.state;else t.State="ENABLED";return{RuleArn:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.PutRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e.name,ScheduleExpression:e.scheduleExpression,State:e.state||"ENABLED",Description:e.description})})).RuleArn}}async putTargets(e,t){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.PutTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:e,Targets:t})})}async listRules(e){let t={};if(e)t.NamePrefix=e;return{Rules:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.ListRules","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})).Rules||[]}}async describeRule(e){let t=await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DescribeRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e})});return{Name:t.Name,Arn:t.Arn,ScheduleExpression:t.ScheduleExpression,State:t.State,Description:t.Description}}async listTargetsByRule(e){return{Targets:(await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.ListTargetsByRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:e})})).Targets||[]}}async deleteRule(e,t){if(t)try{let r=await this.listTargetsByRule(e);if(r.Targets&&r.Targets.length>0)await this.removeTargets(e,r.Targets.map((i)=>i.Id))}catch{}await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DeleteRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e,Force:t||!1})})}async removeTargets(e,t){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.RemoveTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Rule:e,Ids:t})})}async enableRule(e){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.EnableRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e})})}async disableRule(e){await this.client.request({service:"events",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AWSEvents.DisableRule","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify({Name:e})})}async createLambdaSchedule(e){let t=await this.createRule({name:e.name,scheduleExpression:e.scheduleExpression,description:e.description,state:"ENABLED"});return await this.putTargets(e.name,[{Id:"1",Arn:e.functionArn,Input:e.input}]),t}async createEcsSchedule(e){let t=await this.createRule({name:e.name,scheduleExpression:e.scheduleExpression,description:e.description,state:"ENABLED"});return await this.putTargets(e.name,[{Id:"1",Arn:e.clusterArn,RoleArn:e.roleArn,Input:JSON.stringify({containerOverrides:[]})}]),t}async listSchedules(e){let t={};if(e?.NamePrefix)t.NamePrefix=e.NamePrefix;if(e?.State)t.State=e.State;let r=e?.GroupName||"default";return{Schedules:(await this.client.request({service:"scheduler",region:this.region,method:"GET",path:"/schedules",queryParams:{...t,ScheduleGroup:r}}))?.Schedules||[]}}async getSchedule(e){try{let t={};if(e.GroupName)t.groupName=e.GroupName;return await this.client.request({service:"scheduler",region:this.region,method:"GET",path:`/schedules/${encodeURIComponent(e.Name)}`,queryParams:Object.keys(t).length>0?t:void 0})}catch(t){if(t.statusCode===404||t.code==="ResourceNotFoundException")return null;throw t}}async createSchedule(e){let t={ScheduleExpression:e.ScheduleExpression,FlexibleTimeWindow:e.FlexibleTimeWindow,Target:e.Target};if(e.GroupName)t.GroupName=e.GroupName;if(e.ScheduleExpressionTimezone)t.ScheduleExpressionTimezone=e.ScheduleExpressionTimezone;if(e.Description)t.Description=e.Description;if(e.State)t.State=e.State;if(e.StartDate)t.StartDate=e.StartDate.toISOString();if(e.EndDate)t.EndDate=e.EndDate.toISOString();return{ScheduleArn:(await this.client.request({service:"scheduler",region:this.region,method:"POST",path:`/schedules/${encodeURIComponent(e.Name)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))?.ScheduleArn||""}}async updateSchedule(e){let t={};if(e.GroupName)t.GroupName=e.GroupName;if(e.ScheduleExpression)t.ScheduleExpression=e.ScheduleExpression;if(e.ScheduleExpressionTimezone)t.ScheduleExpressionTimezone=e.ScheduleExpressionTimezone;if(e.Description!==void 0)t.Description=e.Description;if(e.State)t.State=e.State;if(e.FlexibleTimeWindow)t.FlexibleTimeWindow=e.FlexibleTimeWindow;if(e.Target)t.Target=e.Target;return{ScheduleArn:(await this.client.request({service:"scheduler",region:this.region,method:"PUT",path:`/schedules/${encodeURIComponent(e.Name)}`,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}))?.ScheduleArn||""}}async deleteSchedule(e){let t={};if(e.GroupName)t.groupName=e.GroupName;await this.client.request({service:"scheduler",region:this.region,method:"DELETE",path:`/schedules/${encodeURIComponent(e.Name)}`,queryParams:Object.keys(t).length>0?t:void 0})}async listScheduleGroups(e){let t={};if(e?.NamePrefix)t.NamePrefix=e.NamePrefix;return{ScheduleGroups:(await this.client.request({service:"scheduler",region:this.region,method:"GET",path:"/schedule-groups",queryParams:Object.keys(t).length>0?t:void 0}))?.ScheduleGroups||[]}}}class Ta{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async registerScalableTarget(e){let t={ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension,MinCapacity:e.minCapacity,MaxCapacity:e.maxCapacity};if(e.roleARN)t.RoleARN=e.roleARN;if(e.suspendedState)t.SuspendedState={DynamicScalingInSuspended:e.suspendedState.dynamicScalingInSuspended,DynamicScalingOutSuspended:e.suspendedState.dynamicScalingOutSuspended,ScheduledScalingSuspended:e.suspendedState.scheduledScalingSuspended};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.RegisterScalableTarget","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeScalableTargets(e){let t={ServiceNamespace:e.serviceNamespace};if(e.resourceIds&&e.resourceIds.length>0)t.ResourceIds=e.resourceIds;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalableTargets","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScalableTargets:r.ScalableTargets||[],NextToken:r.NextToken}}async deregisterScalableTarget(e){let t={ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeregisterScalableTarget","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async putScalingPolicy(e){let t={PolicyName:e.policyName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension,PolicyType:e.policyType};if(e.targetTrackingScalingPolicyConfiguration)t.TargetTrackingScalingPolicyConfiguration=e.targetTrackingScalingPolicyConfiguration;if(e.stepScalingPolicyConfiguration)t.StepScalingPolicyConfiguration=e.stepScalingPolicyConfiguration;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.PutScalingPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{PolicyARN:r.PolicyARN||"",Alarms:r.Alarms||[]}}async describeScalingPolicies(e){let t={ServiceNamespace:e.serviceNamespace};if(e.policyNames&&e.policyNames.length>0)t.PolicyNames=e.policyNames;if(e.resourceId)t.ResourceId=e.resourceId;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalingPolicies","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScalingPolicies:r.ScalingPolicies||[],NextToken:r.NextToken}}async deleteScalingPolicy(e){let t={PolicyName:e.policyName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeleteScalingPolicy","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async putScheduledAction(e){let t={ScheduledActionName:e.scheduledActionName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension,Schedule:e.schedule};if(e.timezone)t.Timezone=e.timezone;if(e.startTime)t.StartTime=e.startTime.toISOString();if(e.endTime)t.EndTime=e.endTime.toISOString();if(e.scalableTargetAction)t.ScalableTargetAction=e.scalableTargetAction;await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.PutScheduledAction","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeScheduledActions(e){let t={ServiceNamespace:e.serviceNamespace};if(e.scheduledActionNames&&e.scheduledActionNames.length>0)t.ScheduledActionNames=e.scheduledActionNames;if(e.resourceId)t.ResourceId=e.resourceId;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScheduledActions","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScheduledActions:r.ScheduledActions||[],NextToken:r.NextToken}}async deleteScheduledAction(e){let t={ScheduledActionName:e.scheduledActionName,ServiceNamespace:e.serviceNamespace,ResourceId:e.resourceId,ScalableDimension:e.scalableDimension};await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DeleteScheduledAction","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)})}async describeScalingActivities(e){let t={ServiceNamespace:e.serviceNamespace};if(e.resourceId)t.ResourceId=e.resourceId;if(e.scalableDimension)t.ScalableDimension=e.scalableDimension;if(e.maxResults)t.MaxResults=e.maxResults;if(e.nextToken)t.NextToken=e.nextToken;if(e.includeNotScaledActivities!==void 0)t.IncludeNotScaledActivities=e.includeNotScaledActivities;let r=await this.client.request({service:"application-autoscaling",region:this.region,method:"POST",path:"/",headers:{"X-Amz-Target":"AnyScaleFrontendService.DescribeScalingActivities","Content-Type":"application/x-amz-json-1.1"},body:JSON.stringify(t)});return{ScalingActivities:r.ScalingActivities||[],NextToken:r.NextToken}}getECSServiceResourceId(e,t){return`service/${e}/${t}`}async registerECSServiceScaling(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);await this.registerScalableTarget({serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",minCapacity:e.minCapacity,maxCapacity:e.maxCapacity})}async createECSCPUScalingPolicy(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);return this.putScalingPolicy({policyName:e.policyName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:e.targetCPUPercent,PredefinedMetricSpecification:{PredefinedMetricType:"ECSServiceAverageCPUUtilization"},ScaleOutCooldown:e.scaleOutCooldown??300,ScaleInCooldown:e.scaleInCooldown??300,DisableScaleIn:e.disableScaleIn??!1}})}async createECSMemoryScalingPolicy(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);return this.putScalingPolicy({policyName:e.policyName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:e.targetMemoryPercent,PredefinedMetricSpecification:{PredefinedMetricType:"ECSServiceAverageMemoryUtilization"},ScaleOutCooldown:e.scaleOutCooldown??300,ScaleInCooldown:e.scaleInCooldown??300,DisableScaleIn:e.disableScaleIn??!1}})}async createECSRequestCountScalingPolicy(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName),r=e.targetGroupArn.split(":").pop()||"",i=e.loadBalancerArn.split(":").pop()||"",s=r.replace("targetgroup/",""),c=`${i.replace("loadbalancer/","")}/${s}`;return this.putScalingPolicy({policyName:e.policyName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",policyType:"TargetTrackingScaling",targetTrackingScalingPolicyConfiguration:{TargetValue:e.targetRequestsPerTarget,PredefinedMetricSpecification:{PredefinedMetricType:"ALBRequestCountPerTarget",ResourceLabel:c},ScaleOutCooldown:e.scaleOutCooldown??300,ScaleInCooldown:e.scaleInCooldown??300,DisableScaleIn:e.disableScaleIn??!1}})}async getECSServiceScalingPolicies(e,t){let r=this.getECSServiceResourceId(e,t);return(await this.describeScalingPolicies({serviceNamespace:"ecs",resourceId:r,scalableDimension:"ecs:service:DesiredCount"})).ScalingPolicies}async removeECSServiceScaling(e,t){let r=this.getECSServiceResourceId(e,t),i=await this.getECSServiceScalingPolicies(e,t);for(let s of i)await this.deleteScalingPolicy({policyName:s.PolicyName,serviceNamespace:"ecs",resourceId:r,scalableDimension:"ecs:service:DesiredCount"});await this.deregisterScalableTarget({serviceNamespace:"ecs",resourceId:r,scalableDimension:"ecs:service:DesiredCount"})}async createECSScheduledScaling(e){let t=this.getECSServiceResourceId(e.clusterName,e.serviceName);await this.putScheduledAction({scheduledActionName:e.actionName,serviceNamespace:"ecs",resourceId:t,scalableDimension:"ecs:service:DesiredCount",schedule:e.schedule,timezone:e.timezone,scalableTargetAction:{minCapacity:e.minCapacity,maxCapacity:e.maxCapacity}})}async getECSScalingActivities(e,t,r=20){let i=this.getECSServiceResourceId(e,t);return(await this.describeScalingActivities({serviceNamespace:"ecs",resourceId:i,scalableDimension:"ecs:service:DesiredCount",maxResults:r})).ScalingActivities.map((o)=>({ActivityId:o.ActivityId,Description:o.Description,Cause:o.Cause,StartTime:o.StartTime,EndTime:o.EndTime,StatusCode:o.StatusCode,StatusMessage:o.StatusMessage}))}}import*as G from"node:crypto";import*as q from"node:net";import*as D from"node:tls";import{readFileSync as P}from"node:fs";class ql{config;s3;server;tlsServer;sessions=new Map;messageCache=new Map;flagsCache=new Map;uidMappingCache=new Map;nextUidCache=new Map;cacheTimestamp=new Map;uidCounter=new Map;CACHE_TTL_MS=1e4;constructor(e){this.config={port:143,sslPort:993,host:"0.0.0.0",prefix:"incoming/",...e},this.s3=new a(e.region||"us-east-1")}async start(){if(this.server=q.createServer((e)=>{this.handleConnection(e)}),this.server.listen(this.config.port,this.config.host,()=>{console.log(`IMAP server listening on ${this.config.host}:${this.config.port}`)}),this.config.tls?.key&&this.config.tls?.cert){let e={key:P(this.config.tls.key),cert:P(this.config.tls.cert)};this.tlsServer=D.createServer(e,(t)=>{this.handleConnection(t)}),this.tlsServer.listen(this.config.sslPort,this.config.host,()=>{console.log(`IMAPS server listening on ${this.config.host}:${this.config.sslPort}`)})}}async stop(){if(this.server)this.server.close();if(this.tlsServer)this.tlsServer.close();for(let e of this.sessions.values())e.socket.destroy();this.sessions.clear()}handleConnection(e){let t=G.randomUUID(),r={id:t,socket:e,state:"not_authenticated"};this.sessions.set(t,r),this.send(r,`* OK [CAPABILITY IMAP4rev1 STARTTLS AUTH=PLAIN] ${this.config.domain} IMAP4rev1 ready`);let i="";e.on("data",async(s)=>{i+=s.toString();let o;while((o=i.indexOf(`\r
|
|
6
6
|
`))!==-1){let c=i.substring(0,o);i=i.substring(o+2);try{await this.processCommand(r,c)}catch(u){console.error(`Error processing command: ${u}`),this.send(r,"* BAD Internal server error")}}}),e.on("close",()=>{this.sessions.delete(t)}),e.on("error",(s)=>{console.error(`Socket error: ${s}`),this.sessions.delete(t)})}send(e,t){e.socket.write(`${t}\r
|
|
7
7
|
`)}async processCommand(e,t){if(console.log(`IMAP CMD [${e.username||"unauth"}]: ${t}`),t.toUpperCase()==="DONE"){if(e.idling&&e.idleTag)e.idling=!1,this.send(e,`${e.idleTag} OK IDLE terminated`),e.idleTag=void 0;return}let r=t.match(/^(\S+)\s+(\S+)(?:\s+(.*))?$/);if(!r){this.send(e,"* BAD Invalid command");return}let[,i,s,o]=r,c=s.toUpperCase();switch(c){case"CAPABILITY":await this.handleCapability(e,i);break;case"NOOP":this.send(e,`${i} OK NOOP completed`);break;case"LOGOUT":await this.handleLogout(e,i);break;case"LOGIN":await this.handleLogin(e,i,o||"");break;case"AUTHENTICATE":await this.handleAuthenticate(e,i,o||"");break;case"SELECT":await this.handleSelect(e,i,o||"");break;case"EXAMINE":await this.handleExamine(e,i,o||"");break;case"LIST":await this.handleList(e,i,o||"");break;case"LSUB":await this.handleLsub(e,i,o||"");break;case"STATUS":await this.handleStatus(e,i,o||"");break;case"FETCH":await this.handleFetch(e,i,o||"");break;case"UID":await this.handleUid(e,i,o||"");break;case"SEARCH":await this.handleSearch(e,i,o||"");break;case"CLOSE":await this.handleClose(e,i);break;case"EXPUNGE":await this.handleExpunge(e,i);break;case"STORE":await this.handleStore(e,i,o||"");break;case"COPY":await this.handleCopy(e,i,o||"");break;case"IDLE":await this.handleIdle(e,i);break;case"STARTTLS":await this.handleStartTls(e,i);break;case"NAMESPACE":await this.handleNamespace(e,i);break;case"XLIST":await this.handleXlist(e,i,o||"");break;case"CREATE":await this.handleCreate(e,i,o||"");break;case"DELETE":await this.handleDelete(e,i,o||"");break;case"SUBSCRIBE":await this.handleSubscribe(e,i,o||"");break;case"UNSUBSCRIBE":await this.handleUnsubscribe(e,i,o||"");break;case"RENAME":await this.handleRename(e,i,o||"");break;case"APPEND":await this.handleAppend(e,i,o||"");break;case"CHECK":await this.handleCheck(e,i);break;case"MOVE":await this.handleMove(e,i,o||"");break;default:this.send(e,`${i} BAD Unknown command ${c}`)}}async handleCapability(e,t){let r=["IMAP4rev1","STARTTLS","AUTH=PLAIN","AUTH=LOGIN","IDLE","NAMESPACE","UIDPLUS","UNSELECT","CHILDREN","SPECIAL-USE","MOVE"];this.send(e,`* CAPABILITY ${r.join(" ")}`),this.send(e,`${t} OK CAPABILITY completed`)}async handleLogout(e,t){this.send(e,`* BYE ${this.config.domain} IMAP4rev1 server logging out`),this.send(e,`${t} OK LOGOUT completed`),e.state="logout",e.socket.end()}async handleLogin(e,t,r){let i=r.match(/^"?([^"\s]+)"?\s+"?([^"\s]+)"?$/);if(!i){this.send(e,`${t} BAD Invalid LOGIN syntax`);return}let[,s,o]=i,c=this.config.users[s];if(!c||c.password!==o){this.send(e,`${t} NO LOGIN failed`);return}e.username=s,e.email=c.email,e.state="authenticated",this.send(e,`${t} OK LOGIN completed`)}async handleAuthenticate(e,t,r){this.send(e,`${t} NO Use LOGIN command`)}async handleSelect(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.replace(/^"(.*)"$/,"$1").toUpperCase();e.selectedMailbox=i,e.state="selected",await this.loadMessages(e,!0);let s=this.getMessagesForFolder(e.email||"",i),o=s.length,c=s.filter((l)=>l.flags.includes("\\Recent")).length,u=s.findIndex((l)=>!l.flags.includes("\\Seen")),g=u>=0?u+1:0,m=this.getUidCounterForFolder(e.email||"",i)+1,d=this.getUidValidity(e.email||"");this.send(e,`* ${o} EXISTS`),this.send(e,`* ${c} RECENT`),this.send(e,`* OK [UNSEEN ${g||1}] First unseen message`),this.send(e,`* OK [UIDVALIDITY ${d}]`),this.send(e,`* OK [UIDNEXT ${m}]`),this.send(e,"* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)"),this.send(e,"* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)]"),this.send(e,`${t} OK [READ-WRITE] SELECT completed`)}async handleExamine(e,t,r){await this.handleSelect(e,t,r)}async handleNoop(e,t){if(e.state==="selected"&&e.selectedMailbox==="INBOX"){let i=this.getMessagesForFolder(e.email||"",e.selectedMailbox||"INBOX").length;await this.loadMessages(e,!0);let s=this.getMessagesForFolder(e.email||"",e.selectedMailbox||"INBOX"),o=s.length;if(o!==i){this.send(e,`* ${o} EXISTS`);let c=s.filter((u)=>u.flags.includes("\\Recent")).length;this.send(e,`* ${c} RECENT`)}}this.send(e,`${t} OK NOOP completed`)}async handleCheck(e,t){if(e.state==="selected"){await this.loadMessages(e,!0);let r=this.getMessagesForFolder(e.email||"",e.selectedMailbox||"INBOX");this.send(e,`* ${r.length} EXISTS`)}this.send(e,`${t} OK CHECK completed`)}async handleList(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!i){this.send(e,`${t} BAD Invalid LIST syntax`);return}let[,s,o]=i;if(o==="*"||o==="%"||o==="")this.send(e,'* LIST (\\HasNoChildren) "/" "INBOX"'),this.send(e,'* LIST (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(e,'* LIST (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(e,'* LIST (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(e,'* LIST (\\HasNoChildren \\Junk) "/" "Junk"'),this.send(e,'* LIST (\\HasNoChildren \\Archive) "/" "Archive"'),this.send(e,'* LIST (\\HasNoChildren \\All) "/" "All Mail"');else if(o.toUpperCase()==="INBOX")this.send(e,'* LIST (\\HasNoChildren) "/" "INBOX"');else{let c=o.toUpperCase();if(c==="SENT"||c==="*SENT*")this.send(e,'* LIST (\\HasNoChildren \\Sent) "/" "Sent"');if(c==="DRAFTS"||c==="*DRAFT*")this.send(e,'* LIST (\\HasNoChildren \\Drafts) "/" "Drafts"');if(c==="TRASH"||c==="*TRASH*")this.send(e,'* LIST (\\HasNoChildren \\Trash) "/" "Trash"');if(c==="JUNK"||c==="SPAM"||c==="*JUNK*"||c==="*SPAM*")this.send(e,'* LIST (\\HasNoChildren \\Junk) "/" "Junk"');if(c==="ARCHIVE"||c==="*ARCHIVE*")this.send(e,'* LIST (\\HasNoChildren \\Archive) "/" "Archive"')}this.send(e,`${t} OK LIST completed`)}async handleLsub(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!i){this.send(e,`${t} BAD Invalid LSUB syntax`);return}let[,s,o]=i;if(o==="*"||o==="%"||o==="")this.send(e,'* LSUB (\\HasNoChildren) "/" "INBOX"'),this.send(e,'* LSUB (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(e,'* LSUB (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(e,'* LSUB (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(e,'* LSUB (\\HasNoChildren \\Junk) "/" "Junk"'),this.send(e,'* LSUB (\\HasNoChildren \\Archive) "/" "Archive"'),this.send(e,'* LSUB (\\HasNoChildren \\All) "/" "All Mail"');else if(o.toUpperCase()==="INBOX")this.send(e,'* LSUB (\\HasNoChildren) "/" "INBOX"');this.send(e,`${t} OK LSUB completed`)}async handleStatus(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"]+)"?\s+\(([^)]+)\)$/i);if(!i){this.send(e,`${t} BAD Invalid STATUS syntax`);return}let[,s,o]=i;await this.loadMessagesForFolder(e,s);let c=this.getMessagesForFolder(e.email||"",s)||[],u=o.toUpperCase().split(/\s+/),g=[];for(let m of u)switch(m){case"MESSAGES":g.push(`MESSAGES ${c.length}`);break;case"RECENT":g.push(`RECENT ${c.filter((d)=>d.flags.includes("\\Recent")).length}`);break;case"UIDNEXT":g.push(`UIDNEXT ${this.getUidCounterForFolder(e.email||"",s)+1}`);break;case"UIDVALIDITY":g.push(`UIDVALIDITY ${this.getUidValidity(e.email||"")}`);break;case"UNSEEN":g.push(`UNSEEN ${c.filter((d)=>!d.flags.includes("\\Seen")).length}`);break}this.send(e,`* STATUS "${s}" (${g.join(" ")})`),this.send(e,`${t} OK STATUS completed`)}async handleFetch(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+(.+)$/i);if(!i){this.send(e,`${t} BAD Invalid FETCH syntax`);return}let[,s,o]=i,c=e.selectedMailbox||"INBOX",u=this.getMessagesForFolder(e.email||"",c),g=this.parseSequenceSet(s,u.length);for(let m of g){let d=u[m-1];if(!d)continue;let l=await this.buildFetchResponse(e,d,m,o);this.send(e,`* ${m} FETCH ${l}`)}this.send(e,`${t} OK FETCH completed`)}async handleUid(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+(.+)$/i);if(!i){this.send(e,`${t} BAD Invalid UID syntax`);return}let[,s,o]=i;switch(s.toUpperCase()){case"FETCH":await this.handleUidFetch(e,t,o);break;case"SEARCH":await this.handleUidSearch(e,t,o);break;case"STORE":await this.handleUidStore(e,t,o);break;case"COPY":await this.handleUidCopy(e,t,o);break;case"MOVE":await this.handleUidMove(e,t,o);break;case"EXPUNGE":await this.handleUidExpunge(e,t,o);break;default:this.send(e,`${t} BAD Unknown UID command`)}}async handleUidFetch(e,t,r){let i=r.match(/^(\S+)\s+(.+)$/i);if(!i){this.send(e,`${t} BAD Invalid UID FETCH syntax`);return}let[,s,o]=i,c=e.selectedMailbox||"INBOX",u=this.getMessagesForFolder(e.email||"",c),g=u.length>0?Math.max(...u.map((d)=>d.uid)):0,m=this.parseSequenceSet(s,g);for(let d of m){let l=u.findIndex((y)=>y.uid===d);if(l===-1)continue;let p=u[l],h=await this.buildFetchResponse(e,p,l+1,o,!0);this.send(e,`* ${l+1} FETCH ${h}`)}this.send(e,`${t} OK UID FETCH completed`)}async handleSearch(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=e.selectedMailbox||"INBOX",s=this.getMessagesForFolder(e.email||"",i);if(s.length===0)this.send(e,"* SEARCH");else{let o=s.map((c,u)=>u+1);this.send(e,`* SEARCH ${o.join(" ")}`)}this.send(e,`${t} OK SEARCH completed`)}async handleUidSearch(e,t,r){let i=e.selectedMailbox||"INBOX",s=this.getMessagesForFolder(e.email||"",i);if(s.length===0)this.send(e,"* SEARCH");else{let o=s.map((c)=>c.uid);this.send(e,`* SEARCH ${o.join(" ")}`)}this.send(e,`${t} OK UID SEARCH completed`)}async handleStore(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+([+-]?FLAGS(?:\.SILENT)?)\s+\(([^)]*)\)/i);if(!i){this.send(e,`${t} BAD Invalid STORE syntax`);return}let[,s,o,c]=i,u=e.selectedMailbox||"INBOX",g=this.getMessagesForFolder(e.email||"",u),m=this.parseSequenceSet(s,g.length),d=o.toUpperCase().includes(".SILENT"),l=c.split(/\s+/).filter((h)=>h),p=await this.loadFlags(e.email||"");for(let h of m){let y=g[h-1];if(!y)continue;if(o.startsWith("+")){for(let f of l)if(!y.flags.includes(f))y.flags.push(f)}else if(o.startsWith("-"))y.flags=y.flags.filter((f)=>!l.includes(f));else y.flags=[...l];if(p[y.key]=[...y.flags],!d)this.send(e,`* ${h} FETCH (FLAGS (${y.flags.join(" ")}))`)}await this.saveFlags(e.email||""),this.send(e,`${t} OK STORE completed`)}async handleUidStore(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+([+-]?FLAGS(?:\.SILENT)?)\s+\(([^)]*)\)/i);if(!i){this.send(e,`${t} BAD Invalid UID STORE syntax`);return}let[,s,o,c]=i,u=e.selectedMailbox||"INBOX",g=this.getMessagesForFolder(e.email||"",u),m=g.length>0?Math.max(...g.map((y)=>y.uid)):0,d=this.parseSequenceSet(s,m),l=o.toUpperCase().includes(".SILENT"),p=c.split(/\s+/).filter((y)=>y),h=await this.loadFlags(e.email||"");for(let y of d){let f=g.findIndex((b)=>b.uid===y);if(f===-1)continue;let S=g[f];if(o.startsWith("+")){for(let b of p)if(!S.flags.includes(b))S.flags.push(b)}else if(o.startsWith("-"))S.flags=S.flags.filter((b)=>!p.includes(b));else S.flags=[...p];if(h[S.key]=[...S.flags],!l)this.send(e,`* ${f+1} FETCH (UID ${S.uid} FLAGS (${S.flags.join(" ")}))`)}await this.saveFlags(e.email||""),this.send(e,`${t} OK UID STORE completed`)}async handleCopy(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!i){this.send(e,`${t} BAD Invalid COPY syntax`);return}let[,s,o]=i,c=e.selectedMailbox||"INBOX",u=this.getMessagesForFolder(e.email||"",c),g=this.parseSequenceSet(s,u.length),m=this.getFolderPrefix(o);for(let d of g){let l=u[d-1];if(!l)continue;try{let p=l.raw||await this.s3.getObject(this.config.bucket,l.key),h=l.key.split("/").pop()||`${Date.now()}`,y=`${m}${h}`;await this.s3.putObject({bucket:this.config.bucket,key:y,body:p,contentType:"message/rfc822"}),console.log(`Copied message from ${l.key} to ${y}`)}catch(p){console.error(`Failed to copy message: ${p}`)}}this.send(e,`${t} OK COPY completed`)}async handleUidCopy(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!i){this.send(e,`${t} BAD Invalid UID COPY syntax`);return}let[,s,o]=i,c=e.selectedMailbox||"INBOX",u=this.getMessagesForFolder(e.email||"",c),g=u.length>0?Math.max(...u.map((l)=>l.uid)):0,m=this.parseSequenceSet(s,g),d=this.getFolderPrefix(o);for(let l of m){let p=u.find((h)=>h.uid===l);if(!p)continue;try{let h=p.raw||await this.s3.getObject(this.config.bucket,p.key),y=p.key.split("/").pop()||`${Date.now()}`,f=`${d}${y}`;await this.s3.putObject({bucket:this.config.bucket,key:f,body:h,contentType:"message/rfc822"}),console.log(`UID COPY: Copied message from ${p.key} to ${f}`)}catch(h){console.error(`Failed to copy message: ${h}`)}}this.send(e,`${t} OK UID COPY completed`)}async handleMove(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!i){this.send(e,`${t} BAD Invalid MOVE syntax`);return}let[,s,o]=i,c=e.selectedMailbox||"INBOX",u=this.getMessagesForFolder(e.email||"",c),g=this.parseSequenceSet(s,u.length),m=this.getFolderPrefix(o),d=[];for(let h of g){let y=u[h-1];if(!y)continue;try{let f=y.raw||await this.s3.getObject(this.config.bucket,y.key),S=y.key.split("/").pop()||`${Date.now()}`,b=`${m}${S}`;await this.s3.putObject({bucket:this.config.bucket,key:b,body:f,contentType:"message/rfc822"}),await this.s3.deleteObject(this.config.bucket,y.key),console.log(`MOVE: ${y.key} -> ${b}`),d.push(h)}catch(f){console.error(`Failed to move message: ${f}`)}}let l=[...d].sort((h,y)=>y-h);for(let h of l)this.send(e,`* ${h} EXPUNGE`);let p=u.filter((h,y)=>!d.includes(y+1));this.setMessagesForFolder(e.email||"",c,p),this.send(e,`* ${p.length} EXISTS`),this.send(e,`${t} OK MOVE completed`)}async handleUidMove(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=r.match(/^(\S+)\s+"?([^"]+)"?$/i);if(!i){this.send(e,`${t} BAD Invalid UID MOVE syntax`);return}let[,s,o]=i,c=e.selectedMailbox||"INBOX",u=this.getMessagesForFolder(e.email||"",c),g=u.length>0?Math.max(...u.map((y)=>y.uid)):0,m=this.parseSequenceSet(s,g),d=this.getFolderPrefix(o),l=[];for(let y of m){let f=u.findIndex((b)=>b.uid===y);if(f===-1)continue;let S=u[f];try{let b=S.raw||await this.s3.getObject(this.config.bucket,S.key),I=S.key.split("/").pop()||`${Date.now()}`,A=`${d}${I}`;await this.s3.putObject({bucket:this.config.bucket,key:A,body:b,contentType:"message/rfc822"}),await this.s3.deleteObject(this.config.bucket,S.key),console.log(`UID MOVE: ${S.key} -> ${A}`),l.push(f+1)}catch(b){console.error(`Failed to move message: ${b}`)}}let p=[...l].sort((y,f)=>f-y);for(let y of p)this.send(e,`* ${y} EXPUNGE`);let h=u.filter((y,f)=>!l.includes(f+1));this.setMessagesForFolder(e.email||"",c,h),this.send(e,`* ${h.length} EXISTS`),this.send(e,`${t} OK UID MOVE completed`)}async handleUidExpunge(e,t,r){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let i=e.selectedMailbox||"INBOX",s=this.getMessagesForFolder(e.email||"",i),o=r.trim(),c=s.length>0?Math.max(...s.map((l)=>l.uid)):0,u=this.parseSequenceSet(o,c),g=[],m=[];for(let l=s.length-1;l>=0;l--){let p=s[l];if(u.includes(p.uid)&&p.flags.includes("\\Deleted"))g.push(l+1),m.push(p.key)}for(let l of m)try{await this.s3.deleteObject(this.config.bucket,l),console.log(`Deleted from S3: ${l}`)}catch(p){console.error(`Failed to delete from S3: ${l}`,p)}for(let l of g)this.send(e,`* ${l} EXPUNGE`);let d=s.filter((l,p)=>!g.includes(p+1));if(this.setMessagesForFolder(e.email||"",i,d),g.length>0)this.send(e,`* ${d.length} EXISTS`);this.send(e,`${t} OK UID EXPUNGE completed`)}async handleClose(e,t){e.state="authenticated",e.selectedMailbox=void 0,this.send(e,`${t} OK CLOSE completed`)}async handleExpunge(e,t){if(e.state!=="selected"){this.send(e,`${t} NO Must select mailbox first`);return}let r=e.selectedMailbox||"INBOX",i=this.getMessagesForFolder(e.email||"",r),s=[],o=[];for(let u=i.length-1;u>=0;u--)if(i[u].flags.includes("\\Deleted"))s.push(u+1),o.push(i[u].key);for(let u of o)try{await this.s3.deleteObject(this.config.bucket,u),console.log(`EXPUNGE: Deleted from S3: ${u}`)}catch(g){console.error(`Failed to delete from S3: ${u}`,g)}for(let u of s)this.send(e,`* ${u} EXPUNGE`);let c=i.filter((u)=>!u.flags.includes("\\Deleted"));if(this.setMessagesForFolder(e.email||"",r,c),s.length>0)this.send(e,`* ${c.length} EXISTS`);this.send(e,`${t} OK EXPUNGE completed`)}async handleIdle(e,t){e.idling=!0,e.idleTag=t,this.send(e,"+ idling")}async handleStartTls(e,t){if(!this.config.tls?.key||!this.config.tls?.cert){this.send(e,`${t} NO TLS not configured`);return}this.send(e,`${t} OK Begin TLS negotiation`);let r={key:P(this.config.tls.key),cert:P(this.config.tls.cert),isServer:!0},i=new D.TLSSocket(e.socket,r);e.socket=i}async handleNamespace(e,t){this.send(e,'* NAMESPACE (("" "/")) NIL NIL'),this.send(e,`${t} OK NAMESPACE completed`)}async loadMessages(e,t=!1){let r=e.email,i=e.selectedMailbox||"INBOX";if(!r)return;let s=`${r}:${i}`,o=this.cacheTimestamp.get(s)||0,u=Date.now()-o;if(!t&&u<this.CACHE_TTL_MS){if(this.getMessagesForFolder(r,i).length>0)return}let g=await this.loadFlags(r);await this.loadUidMapping(r);try{if(this.isAllMailFolder(i)){await this.loadAllMailFolder(r,g);return}let m=this.getFolderPrefix(i),d=await this.s3.list({bucket:this.config.bucket,prefix:m,maxKeys:1000}),l=[],p=!1;for(let y of d){if(!y.Key)continue;let f="";try{f=await this.s3.getObject(this.config.bucket,y.Key)}catch{continue}let S=this.parseHeaders(f);if(i==="INBOX"){if(!(S.to||"").toLowerCase().includes(r.toLowerCase()))continue}let b=this.uidMappingCache.get(r)?.[y.Key],I=this.getOrAssignUid(r,y.Key);if(!b)p=!0;let A=g[y.Key]||[];l.push({uid:I,key:y.Key,size:y.Size||f.length,date:new Date(y.LastModified||Date.now()),flags:[...A],from:S.from,to:S.to,subject:S.subject,raw:f})}if(l.sort((y,f)=>y.uid-f.uid),p)await this.saveUidMapping(r);let h=l.length>0?Math.max(...l.map((y)=>y.uid)):0;this.setUidCounterForFolder(r,i,h),this.setMessagesForFolder(r,i,l),this.cacheTimestamp.set(s,Date.now()),console.log(`Loaded ${l.length} messages for ${r} in ${i} from S3 (hasNewMessages=${p})`)}catch(m){console.error(`Error loading messages from S3: ${m}`)}}async loadAllMailFolder(e,t){let i=`${e}:ALL MAIL`;await this.loadUidMapping(e);let s=[this.config.prefix||"incoming/","sent/","trash/","drafts/","junk/","archive/"],o=[],c=new Set,u=!1;for(let m of s)try{let d=await this.s3.list({bucket:this.config.bucket,prefix:m,maxKeys:1000});for(let l of d){if(!l.Key||c.has(l.Key))continue;c.add(l.Key);let p="";try{p=await this.s3.getObject(this.config.bucket,l.Key)}catch{continue}let h=this.parseHeaders(p);if(m===(this.config.prefix||"incoming/")){if(!(h.to||"").toLowerCase().includes(e.toLowerCase()))continue}let y=this.uidMappingCache.get(e)?.[l.Key],f=this.getOrAssignUid(e,l.Key);if(!y)u=!0;let S=t[l.Key]||[];o.push({uid:f,key:l.Key,size:l.Size||p.length,date:new Date(l.LastModified||Date.now()),flags:[...S],from:h.from,to:h.to,subject:h.subject,raw:p})}}catch(d){console.error(`Error loading messages from prefix ${m}: ${d}`)}if(o.sort((m,d)=>m.uid-d.uid),u)await this.saveUidMapping(e);let g=o.length>0?Math.max(...o.map((m)=>m.uid)):0;this.setUidCounterForFolder(e,"ALL MAIL",g),this.setMessagesForFolder(e,"ALL MAIL",o),this.cacheTimestamp.set(i,Date.now()),console.log(`Loaded ${o.length} total messages for ${e} in All Mail from S3 (hasNewMessages=${u})`)}async loadMessagesForFolder(e,t){let r=e.email;if(!r)return;let i=`${r}:${t}`,s=this.cacheTimestamp.get(i)||0;if(Date.now()-s<this.CACHE_TTL_MS){if(this.getMessagesForFolder(r,t).length>0)return}let u=await this.loadFlags(r);if(await this.loadUidMapping(r),this.isAllMailFolder(t)){await this.loadAllMailFolder(r,u);return}try{let g=this.getFolderPrefix(t),m=await this.s3.list({bucket:this.config.bucket,prefix:g,maxKeys:1000}),d=[],l=!1;for(let h of m){if(!h.Key)continue;let y="";try{y=await this.s3.getObject(this.config.bucket,h.Key)}catch{continue}let f=this.parseHeaders(y);if(t.toUpperCase()==="INBOX"){if(!(f.to||"").toLowerCase().includes(r.toLowerCase()))continue}let S=this.uidMappingCache.get(r)?.[h.Key],b=this.getOrAssignUid(r,h.Key);if(!S)l=!0;let I=u[h.Key]||[];d.push({uid:b,key:h.Key,size:h.Size||y.length,date:new Date(h.LastModified||Date.now()),flags:[...I],from:f.from,to:f.to,subject:f.subject,raw:y})}if(d.sort((h,y)=>h.uid-y.uid),l)await this.saveUidMapping(r);let p=d.length>0?Math.max(...d.map((h)=>h.uid)):0;this.setUidCounterForFolder(r,t,p),this.setMessagesForFolder(r,t,d),this.cacheTimestamp.set(i,Date.now())}catch(g){console.error(`Error loading messages for folder ${t}: ${g}`),this.setMessagesForFolder(r,t,[])}}parseHeaders(e){let t={},i=(e.split(`\r
|
|
8
8
|
\r
|
|
@@ -24,10 +24,10 @@ ${g}\r
|
|
|
24
24
|
`).slice(1).join(`
|
|
25
25
|
|
|
26
26
|
`);c.push(`BODY[TEXT] {${m.length}}\r
|
|
27
|
-
${m}`)}return`(${c.join(" ")})`}buildEnvelope(e){let t=(c)=>c?`"${c.replace(/"/g,"\\\"")}"`:"NIL",r=t(e.date.toUTCString()),i=t(e.subject),s=e.from?`((NIL NIL "${e.from.split("@")[0]}" "${e.from.split("@")[1]||""}"))`:"NIL",o=e.to?`((NIL NIL "${e.to.split("@")[0]}" "${e.to.split("@")[1]||""}"))`:"NIL";return`(${r} ${i} ${s} ${s} ${s} ${o} NIL NIL NIL NIL)`}formatImapDate(e){let t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],r=e.getDate().toString().padStart(2,"0"),i=t[e.getMonth()],s=e.getFullYear(),o=e.getHours().toString().padStart(2,"0"),c=e.getMinutes().toString().padStart(2,"0"),u=e.getSeconds().toString().padStart(2,"0"),g="+0000";return`${r}-${i}-${s} ${o}:${c}:${u} +0000`}parseSequenceSet(e,t){let r=[];for(let i of e.split(","))if(i.includes(":")){let[s,o]=i.split(":"),c=s==="*"?t:Number.parseInt(s,10),u=o==="*"?t:Number.parseInt(o,10);for(let g=Math.min(c,u);g<=Math.max(c,u);g++)if(g>0&&g<=t)r.push(g)}else{let s=i==="*"?t:Number.parseInt(i,10);if(s>0&&s<=t)r.push(s)}return[...new Set(r)].sort((i,s)=>i-s)}getUidValidity(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r),t=t&t;return Math.abs(t)||1}getFolderPrefix(e){switch(e.toUpperCase()){case"INBOX":return this.config.prefix||"incoming/";case"TRASH":return"trash/";case"SENT":return"sent/";case"DRAFTS":return"drafts/";case"JUNK":return"junk/";case"ARCHIVE":return"archive/";case"ALL MAIL":return"";default:return`folders/${e.toLowerCase()}/`}}isAllMailFolder(e){return e.toUpperCase()==="ALL MAIL"}async loadFlags(e){let t=this.flagsCache.get(e);if(t)return t;try{let r=`flags/${e.replace("@","_at_")}.json`,i=await this.s3.getObject(this.config.bucket,r),s=JSON.parse(i);return this.flagsCache.set(e,s),s}catch{let r={};return this.flagsCache.set(e,r),r}}async saveFlags(e){let t=this.flagsCache.get(e);if(!t)return;try{let r=`flags/${e.replace("@","_at_")}.json`;await this.s3.putObject({bucket:this.config.bucket,key:r,body:JSON.stringify(t),contentType:"application/json"}),console.log(`Saved flags for ${e}`)}catch(r){console.error(`Failed to save flags for ${e}:`,r)}}async loadUidMapping(e){let t=this.uidMappingCache.get(e),r=this.nextUidCache.get(e);if(t&&r!==void 0)return{mapping:t,nextUid:r};try{let i=`uids/${e.replace("@","_at_")}.json`,s=await this.s3.getObject(this.config.bucket,i),o=JSON.parse(s),c=o.mapping||{},u=o.nextUid||1;return this.uidMappingCache.set(e,c),this.nextUidCache.set(e,u),{mapping:c,nextUid:u}}catch{let i={};return this.uidMappingCache.set(e,i),this.nextUidCache.set(e,1),{mapping:i,nextUid:1}}}async saveUidMapping(e){let t=this.uidMappingCache.get(e),r=this.nextUidCache.get(e);if(!t)return;try{let i=`uids/${e.replace("@","_at_")}.json`;await this.s3.putObject({bucket:this.config.bucket,key:i,body:JSON.stringify({mapping:t,nextUid:r}),contentType:"application/json"})}catch(i){console.error(`Failed to save UID mapping for ${e}:`,i)}}getOrAssignUid(e,t){let r=this.uidMappingCache.get(e);if(!r)r={},this.uidMappingCache.set(e,r);if(r[t])return r[t];let i=this.nextUidCache.get(e)||1;return r[t]=i,i++,this.nextUidCache.set(e,i),r[t]}getMessagesForFolder(e,t){let r=this.messageCache.get(e);if(!r)return[];return r.get(t.toUpperCase())||[]}setMessagesForFolder(e,t,r){let i=this.messageCache.get(e);if(!i)i=new Map,this.messageCache.set(e,i);i.set(t.toUpperCase(),r)}getUidCounterForFolder(e,t){let r=this.uidCounter.get(e);if(!r)return 0;return r.get(t.toUpperCase())||0}setUidCounterForFolder(e,t,r){let i=this.uidCounter.get(e);if(!i)i=new Map,this.uidCounter.set(e,i);i.set(t.toUpperCase(),r)}async handleXlist(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!i){this.send(e,`${t} BAD Invalid XLIST syntax`);return}let[,s,o]=i;if(o==="*"||o==="%"||o==="")this.send(e,'* XLIST (\\HasNoChildren \\Inbox) "/" "INBOX"'),this.send(e,'* XLIST (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(e,'* XLIST (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(e,'* XLIST (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(e,'* XLIST (\\HasNoChildren \\Spam) "/" "Junk"'),this.send(e,'* XLIST (\\HasNoChildren \\AllMail) "/" "All Mail"'),this.send(e,'* XLIST (\\HasNoChildren) "/" "Archive"');this.send(e,`${t} OK XLIST completed`)}async handleCreate(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.replace(/^"(.*)"$/,"$1");this.send(e,`${t} OK CREATE completed`)}async handleDelete(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.replace(/^"(.*)"$/,"$1").toUpperCase();if(["INBOX","SENT","DRAFTS","TRASH","JUNK","ARCHIVE","ALL MAIL"].includes(i)){this.send(e,`${t} NO Cannot delete system folder`);return}this.send(e,`${t} OK DELETE completed`)}async handleSubscribe(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}this.send(e,`${t} OK SUBSCRIBE completed`)}async handleUnsubscribe(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}this.send(e,`${t} OK UNSUBSCRIBE completed`)}async handleRename(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"\s]+)"?\s+"?([^"\s]+)"?$/);if(!i){this.send(e,`${t} BAD Invalid RENAME syntax`);return}let s=i[1].toUpperCase();if(["INBOX","SENT","DRAFTS","TRASH","JUNK","ARCHIVE","ALL MAIL"].includes(s)){this.send(e,`${t} NO Cannot rename system folder`);return}this.send(e,`${t} OK RENAME completed`)}async handleAppend(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}this.send(e,`${t} OK APPEND completed`)}}async function jA(e){let t=new ql(e);return await t.start(),t}import*as _ from"node:crypto";import*as j from"node:net";import*as N from"node:tls";import{readFileSync as R}from"node:fs";class Vl{config;ses;s3;server;tlsServer;sessions=new Map;constructor(e){if(this.config={port:587,tlsPort:465,host:"0.0.0.0",...e},this.ses=new
|
|
27
|
+
${m}`)}return`(${c.join(" ")})`}buildEnvelope(e){let t=(c)=>c?`"${c.replace(/"/g,"\\\"")}"`:"NIL",r=t(e.date.toUTCString()),i=t(e.subject),s=e.from?`((NIL NIL "${e.from.split("@")[0]}" "${e.from.split("@")[1]||""}"))`:"NIL",o=e.to?`((NIL NIL "${e.to.split("@")[0]}" "${e.to.split("@")[1]||""}"))`:"NIL";return`(${r} ${i} ${s} ${s} ${s} ${o} NIL NIL NIL NIL)`}formatImapDate(e){let t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],r=e.getDate().toString().padStart(2,"0"),i=t[e.getMonth()],s=e.getFullYear(),o=e.getHours().toString().padStart(2,"0"),c=e.getMinutes().toString().padStart(2,"0"),u=e.getSeconds().toString().padStart(2,"0"),g="+0000";return`${r}-${i}-${s} ${o}:${c}:${u} +0000`}parseSequenceSet(e,t){let r=[];for(let i of e.split(","))if(i.includes(":")){let[s,o]=i.split(":"),c=s==="*"?t:Number.parseInt(s,10),u=o==="*"?t:Number.parseInt(o,10);for(let g=Math.min(c,u);g<=Math.max(c,u);g++)if(g>0&&g<=t)r.push(g)}else{let s=i==="*"?t:Number.parseInt(i,10);if(s>0&&s<=t)r.push(s)}return[...new Set(r)].sort((i,s)=>i-s)}getUidValidity(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r),t=t&t;return Math.abs(t)||1}getFolderPrefix(e){switch(e.toUpperCase()){case"INBOX":return this.config.prefix||"incoming/";case"TRASH":return"trash/";case"SENT":return"sent/";case"DRAFTS":return"drafts/";case"JUNK":return"junk/";case"ARCHIVE":return"archive/";case"ALL MAIL":return"";default:return`folders/${e.toLowerCase()}/`}}isAllMailFolder(e){return e.toUpperCase()==="ALL MAIL"}async loadFlags(e){let t=this.flagsCache.get(e);if(t)return t;try{let r=`flags/${e.replace("@","_at_")}.json`,i=await this.s3.getObject(this.config.bucket,r),s=JSON.parse(i);return this.flagsCache.set(e,s),s}catch{let r={};return this.flagsCache.set(e,r),r}}async saveFlags(e){let t=this.flagsCache.get(e);if(!t)return;try{let r=`flags/${e.replace("@","_at_")}.json`;await this.s3.putObject({bucket:this.config.bucket,key:r,body:JSON.stringify(t),contentType:"application/json"}),console.log(`Saved flags for ${e}`)}catch(r){console.error(`Failed to save flags for ${e}:`,r)}}async loadUidMapping(e){let t=this.uidMappingCache.get(e),r=this.nextUidCache.get(e);if(t&&r!==void 0)return{mapping:t,nextUid:r};try{let i=`uids/${e.replace("@","_at_")}.json`,s=await this.s3.getObject(this.config.bucket,i),o=JSON.parse(s),c=o.mapping||{},u=o.nextUid||1;return this.uidMappingCache.set(e,c),this.nextUidCache.set(e,u),{mapping:c,nextUid:u}}catch{let i={};return this.uidMappingCache.set(e,i),this.nextUidCache.set(e,1),{mapping:i,nextUid:1}}}async saveUidMapping(e){let t=this.uidMappingCache.get(e),r=this.nextUidCache.get(e);if(!t)return;try{let i=`uids/${e.replace("@","_at_")}.json`;await this.s3.putObject({bucket:this.config.bucket,key:i,body:JSON.stringify({mapping:t,nextUid:r}),contentType:"application/json"})}catch(i){console.error(`Failed to save UID mapping for ${e}:`,i)}}getOrAssignUid(e,t){let r=this.uidMappingCache.get(e);if(!r)r={},this.uidMappingCache.set(e,r);if(r[t])return r[t];let i=this.nextUidCache.get(e)||1;return r[t]=i,i++,this.nextUidCache.set(e,i),r[t]}getMessagesForFolder(e,t){let r=this.messageCache.get(e);if(!r)return[];return r.get(t.toUpperCase())||[]}setMessagesForFolder(e,t,r){let i=this.messageCache.get(e);if(!i)i=new Map,this.messageCache.set(e,i);i.set(t.toUpperCase(),r)}getUidCounterForFolder(e,t){let r=this.uidCounter.get(e);if(!r)return 0;return r.get(t.toUpperCase())||0}setUidCounterForFolder(e,t,r){let i=this.uidCounter.get(e);if(!i)i=new Map,this.uidCounter.set(e,i);i.set(t.toUpperCase(),r)}async handleXlist(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"]*)"?\s+"?([^"]*)"?$/);if(!i){this.send(e,`${t} BAD Invalid XLIST syntax`);return}let[,s,o]=i;if(o==="*"||o==="%"||o==="")this.send(e,'* XLIST (\\HasNoChildren \\Inbox) "/" "INBOX"'),this.send(e,'* XLIST (\\HasNoChildren \\Sent) "/" "Sent"'),this.send(e,'* XLIST (\\HasNoChildren \\Drafts) "/" "Drafts"'),this.send(e,'* XLIST (\\HasNoChildren \\Trash) "/" "Trash"'),this.send(e,'* XLIST (\\HasNoChildren \\Spam) "/" "Junk"'),this.send(e,'* XLIST (\\HasNoChildren \\AllMail) "/" "All Mail"'),this.send(e,'* XLIST (\\HasNoChildren) "/" "Archive"');this.send(e,`${t} OK XLIST completed`)}async handleCreate(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.replace(/^"(.*)"$/,"$1");this.send(e,`${t} OK CREATE completed`)}async handleDelete(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.replace(/^"(.*)"$/,"$1").toUpperCase();if(["INBOX","SENT","DRAFTS","TRASH","JUNK","ARCHIVE","ALL MAIL"].includes(i)){this.send(e,`${t} NO Cannot delete system folder`);return}this.send(e,`${t} OK DELETE completed`)}async handleSubscribe(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}this.send(e,`${t} OK SUBSCRIBE completed`)}async handleUnsubscribe(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}this.send(e,`${t} OK UNSUBSCRIBE completed`)}async handleRename(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}let i=r.match(/^"?([^"\s]+)"?\s+"?([^"\s]+)"?$/);if(!i){this.send(e,`${t} BAD Invalid RENAME syntax`);return}let s=i[1].toUpperCase();if(["INBOX","SENT","DRAFTS","TRASH","JUNK","ARCHIVE","ALL MAIL"].includes(s)){this.send(e,`${t} NO Cannot rename system folder`);return}this.send(e,`${t} OK RENAME completed`)}async handleAppend(e,t,r){if(e.state==="not_authenticated"){this.send(e,`${t} NO Must authenticate first`);return}this.send(e,`${t} OK APPEND completed`)}}async function jA(e){let t=new ql(e);return await t.start(),t}import*as _ from"node:crypto";import*as j from"node:net";import*as N from"node:tls";import{readFileSync as R}from"node:fs";class Vl{config;ses;s3;server;tlsServer;sessions=new Map;constructor(e){if(this.config={port:587,tlsPort:465,host:"0.0.0.0",...e},this.ses=new Xe(e.region||"us-east-1"),e.sentBucket)this.s3=new a(e.region||"us-east-1")}async start(){if(this.server=j.createServer((e)=>{this.handleConnection(e,!1)}),this.server.listen(this.config.port,this.config.host,()=>{console.log(`SMTP server listening on ${this.config.host}:${this.config.port} (STARTTLS)`)}),this.config.tls?.key&&this.config.tls?.cert){let e={key:R(this.config.tls.key),cert:R(this.config.tls.cert)};this.tlsServer=N.createServer(e,(t)=>{this.handleConnection(t,!0)}),this.tlsServer.listen(this.config.tlsPort,this.config.host,()=>{console.log(`SMTP server listening on ${this.config.host}:${this.config.tlsPort} (TLS)`)})}}async stop(){if(this.server)this.server.close();if(this.tlsServer)this.tlsServer.close();for(let e of this.sessions.values())e.socket.destroy();this.sessions.clear()}handleConnection(e,t){let r=_.randomUUID(),i={id:r,socket:e,secure:t,state:"greeting",authenticated:!1,rcptTo:[],dataBuffer:"",tlsUpgraded:t};this.sessions.set(r,i),console.log(`SMTP connection from ${e.remoteAddress} (session: ${r.slice(0,8)})`),this.send(i,`220 ${this.config.domain} ESMTP Mail Server`),i.state="ready";let s="";e.on("data",async(o)=>{s+=o.toString();let c;while((c=s.indexOf(`\r
|
|
28
28
|
`))!==-1){let u=s.slice(0,c);if(s=s.slice(c+2),i.state==="data")await this.handleDataLine(i,u);else await this.handleCommand(i,u)}}),e.on("close",()=>{console.log(`SMTP session ${r.slice(0,8)} closed`),this.sessions.delete(r)}),e.on("error",(o)=>{console.error(`SMTP session ${r.slice(0,8)} error:`,o.message),this.sessions.delete(r)})}send(e,t){if(!e.socket.destroyed)e.socket.write(t+`\r
|
|
29
29
|
`)}async handleCommand(e,t){let r=t.split(" ")[0].toUpperCase(),i=t.slice(r.length).trim();switch(console.log(`SMTP CMD [${e.username||"anon"}]: ${r} ${i.includes("AUTH")?"***":i}`),r){case"EHLO":case"HELO":await this.handleEhlo(e,i);break;case"STARTTLS":await this.handleStartTls(e);break;case"AUTH":await this.handleAuth(e,i);break;case"MAIL":await this.handleMailFrom(e,i);break;case"RCPT":await this.handleRcptTo(e,i);break;case"DATA":await this.handleData(e);break;case"RSET":this.resetSession(e),this.send(e,"250 OK");break;case"NOOP":this.send(e,"250 OK");break;case"QUIT":this.send(e,`221 ${this.config.domain} closing connection`),e.socket.end();break;default:this.send(e,"500 Unrecognized command")}}async handleEhlo(e,t){let r=[`250-${this.config.domain} Hello ${t}`,"250-SIZE 26214400","250-8BITMIME","250-PIPELINING"];if(!e.secure&&this.config.tls?.key)r.push("250-STARTTLS");r.push("250-AUTH PLAIN LOGIN"),r.push("250 OK");for(let i of r)this.send(e,i)}async handleStartTls(e){if(e.secure||e.tlsUpgraded){this.send(e,"503 TLS already active");return}if(!this.config.tls?.key||!this.config.tls?.cert){this.send(e,"454 TLS not available");return}this.send(e,"220 Ready to start TLS");let t={key:R(this.config.tls.key),cert:R(this.config.tls.cert),isServer:!0},r=new N.TLSSocket(e.socket,t);e.socket=r,e.secure=!0,e.tlsUpgraded=!0,this.resetSession(e)}async handleAuth(e,t){let r=t.split(" "),i=r[0].toUpperCase();if(i==="PLAIN")if(r[1])await this.handleAuthPlain(e,r[1]);else this.send(e,"334 "),e.state="ready";else if(i==="LOGIN"){this.send(e,"334 VXNlcm5hbWU6");let s=e.socket.listeners("data")[0];e.socket.removeAllListeners("data");let o="username",c="";e.socket.on("data",async(u)=>{let g=u.toString().trim();if(o==="username")c=Buffer.from(g,"base64").toString("utf-8"),o="password",this.send(e,"334 UGFzc3dvcmQ6");else if(o==="password"){let m=Buffer.from(g,"base64").toString("utf-8");e.socket.removeAllListeners("data"),e.socket.on("data",s),await this.authenticateUser(e,c,m)}})}else this.send(e,"504 Unrecognized authentication mechanism")}async handleAuthPlain(e,t){try{let i=Buffer.from(t,"base64").toString("utf-8").split("\x00"),s=i.length===3?i[1]:i[0],o=i.length===3?i[2]:i[1];await this.authenticateUser(e,s,o)}catch(r){this.send(e,"535 Authentication failed")}}async authenticateUser(e,t,r){let i=t.includes("@")?t.split("@")[0]:t,s=this.config.users[i];if(s&&s.password===r)e.authenticated=!0,e.username=i,e.email=s.email,this.send(e,"235 Authentication successful"),console.log(`SMTP AUTH success: ${i}`);else this.send(e,"535 Authentication failed"),console.log(`SMTP AUTH failed: ${t}`)}async handleMailFrom(e,t){if(!e.authenticated){this.send(e,"530 Authentication required");return}let r=t.match(/FROM:\s*<([^>]*)>/i);if(!r){this.send(e,"501 Syntax error in MAIL FROM");return}let i=r[1];if(!i.endsWith(`@${this.config.domain}`)){this.send(e,`553 Sender address must be from @${this.config.domain}`);return}e.mailFrom=i,e.state="mail",this.send(e,"250 OK")}async handleRcptTo(e,t){if(!e.authenticated){this.send(e,"530 Authentication required");return}if(!e.mailFrom){this.send(e,"503 MAIL FROM required first");return}let r=t.match(/TO:\s*<([^>]*)>/i);if(!r){this.send(e,"501 Syntax error in RCPT TO");return}e.rcptTo.push(r[1]),e.state="rcpt",this.send(e,"250 OK")}async handleData(e){if(!e.authenticated){this.send(e,"530 Authentication required");return}if(e.rcptTo.length===0){this.send(e,"503 RCPT TO required first");return}e.state="data",e.dataBuffer="",this.send(e,"354 Start mail input; end with <CRLF>.<CRLF>")}async handleDataLine(e,t){if(t===".")await this.sendEmail(e);else{let r=t.startsWith(".")?t.slice(1):t;e.dataBuffer+=r+`\r
|
|
30
|
-
`}}async sendEmail(e){try{let t=e.dataBuffer,r=await this.ses.sendRawEmail({source:e.mailFrom,destinations:e.rcptTo,rawMessage:t});if(console.log(`SMTP: Email sent via SES, MessageId: ${r.MessageId}`),this.s3&&this.config.sentBucket)try{let i=`${this.config.sentPrefix||"sent/"}${e.email}/${Date.now()}-${r.MessageId}`;await this.s3.putObject({bucket:this.config.sentBucket,key:i,body:t,contentType:"message/rfc822"}),console.log(`SMTP: Email stored in S3: ${i}`)}catch(i){console.error("SMTP: Failed to store sent email in S3 (email was sent successfully):",i.message)}this.send(e,`250 OK Message accepted, ID: ${r.MessageId}`),this.resetSession(e)}catch(t){console.error("SMTP: Failed to send email:",t.message),this.send(e,`451 Failed to send: ${t.message}`),this.resetSession(e)}}resetSession(e){e.state="ready",e.mailFrom=void 0,e.rcptTo=[],e.dataBuffer=""}}async function zA(e){let t=new Vl(e);return await t.start(),t}class St{config;sns;s3;scheduler;constructor(e={}){if(this.config={region:"us-east-1",inboxPrefix:"sms/inbox/",scheduledPrefix:"sms/scheduled/",receiptPrefix:"sms/receipts/",...e},this.sns=new Ke(this.config.region),this.config.inboxBucket||this.config.scheduledBucket)this.s3=new a(this.config.region);if(this.config.schedulerLambdaArn)this.scheduler=new cn(this.config.region)}async send(e){let{to:t,from:r,type:i,scheduledAt:s,templateId:o,templateVariables:c}=e,u=r||this.config.defaultSender,g=e.body;if(o){let d=await this.getTemplate(o);if(d)g=this.applyTemplate(d.body,c||{})}if(s&&s>new Date)return{messageId:"",scheduledId:(await this.scheduleMessage({to:t,body:g,from:u,scheduledAt:s,templateId:o,templateVariables:c})).id};return{messageId:(await this.sns.publish({PhoneNumber:t,Message:g,MessageAttributes:{"AWS.SNS.SMS.SMSType":{DataType:"String",StringValue:i||"Transactional"},...u&&{"AWS.SNS.SMS.SenderID":{DataType:"String",StringValue:u}}}})).MessageId||""}}async sendText(e,t,r){return this.send({to:e,body:t,from:r})}async getInbox(e={}){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=e.prefix||this.config.inboxPrefix||"sms/inbox/",r=await this.s3.list({bucket:this.config.inboxBucket,prefix:t,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key)continue;try{let o=await this.s3.getObject(this.config.inboxBucket,s.Key),c=this.parseIncomingSms(o,s.Key);if(c)i.push(c)}catch(o){console.error(`Failed to read SMS ${s.Key}:`,o)}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getMessage(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");try{let t=await this.s3.getObject(this.config.inboxBucket,e);return this.parseIncomingSms(t,e)}catch(t){return null}}async deleteMessage(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");await this.s3.deleteObject(this.config.inboxBucket,e)}async moveMessage(e,t){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let r=await this.s3.getObject(this.config.inboxBucket,e),i=e.split("/").pop()||`${Date.now()}.json`,s=`${t}${i}`;return await this.s3.putObject({bucket:this.config.inboxBucket,key:s,body:r,contentType:"application/json"}),await this.s3.deleteObject(this.config.inboxBucket,e),s}async archiveMessage(e){return this.moveMessage(e,"sms/archive/")}async markAsRead(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=await this.s3.getObject(this.config.inboxBucket,e),r=JSON.parse(t);r.read=!0,r.readAt=new Date().toISOString(),await this.s3.putObject({bucket:this.config.inboxBucket,key:e,body:JSON.stringify(r,null,2),contentType:"application/json"})}async markAsUnread(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=await this.s3.getObject(this.config.inboxBucket,e),r=JSON.parse(t);r.read=!1,delete r.readAt,await this.s3.putObject({bucket:this.config.inboxBucket,key:e,body:JSON.stringify(r,null,2),contentType:"application/json"})}async getUnreadCount(){return(await this.getInbox({maxResults:1000})).filter((t)=>!t.read).length}async markManyAsRead(e){await Promise.all(e.map((t)=>this.markAsRead(t)))}async deleteMany(e){await Promise.all(e.map((t)=>this.deleteMessage(t)))}async getInboxCount(){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");return(await this.s3.list({bucket:this.config.inboxBucket,prefix:this.config.inboxPrefix||"sms/inbox/",maxKeys:1000}))?.length||0}getConversationId(e,t){let r=[re(e),re(t)].sort();return`${r[0]}_${r[1]}`}async getConversation(e,t){let r=await this.getInbox({maxResults:1000}),i=re(e);return r.filter((s)=>{let o=re(s.from),c=re(s.to);return o===i||c===i}).sort((s,o)=>s.timestamp.getTime()-o.timestamp.getTime())}async getConversations(){let e=await this.getInbox({maxResults:1000}),t=new Map;for(let r of e){let i=re(r.from);if(!t.has(i))t.set(i,{phoneNumber:i,messages:[]});t.get(i).messages.push(r)}return Array.from(t.values()).map((r)=>({phoneNumber:r.phoneNumber,lastMessage:r.messages[0],messageCount:r.messages.length,unreadCount:r.messages.filter((i)=>!i.read).length})).sort((r,i)=>i.lastMessage.timestamp.getTime()-r.lastMessage.timestamp.getTime())}async storeIncomingSms(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=e.timestamp||new Date,r=e.messageId||`${Date.now()}-${Math.random().toString(36).slice(2)}`,i=`${this.config.inboxPrefix}${t.toISOString().split("T")[0]}/${r}.json`,s={from:e.from,to:e.to,body:e.body,messageId:r,timestamp:t.toISOString(),raw:e.raw};return await this.s3.putObject({bucket:this.config.inboxBucket,key:i,body:JSON.stringify(s,null,2),contentType:"application/json"}),i}async isOptedOut(e){return this.sns.checkIfPhoneNumberIsOptedOut(e)}async getOptedOutNumbers(){return(await this.sns.listPhoneNumbersOptedOut()).phoneNumbers||[]}async optIn(e){await this.sns.optInPhoneNumber(e)}async isInSandbox(){return(await this.sns.getSMSSandboxAccountStatus()).IsInSandbox}async addSandboxNumber(e){await this.sns.createSMSSandboxPhoneNumber(e)}async verifySandboxNumber(e,t){await this.sns.verifySMSSandboxPhoneNumber(e,t)}async listSandboxNumbers(){return(await this.sns.listSMSSandboxPhoneNumbers())?.PhoneNumbers||[]}async scheduleMessage(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Scheduled bucket not configured");let r=`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,i=`${this.config.scheduledPrefix}${r}.json`,s={id:r,to:e.to,body:e.body,from:e.from,scheduledAt:e.scheduledAt,status:"pending",createdAt:new Date,templateId:e.templateId,templateVariables:e.templateVariables};if(await this.s3.putObject({bucket:t,key:i,body:JSON.stringify(s,null,2),contentType:"application/json"}),this.scheduler&&this.config.schedulerLambdaArn&&this.config.schedulerRoleArn){let o=`at(${e.scheduledAt.toISOString().replace(/\.\d{3}Z$/,"")})`;await this.scheduler.createLambdaSchedule({name:`sms-${r}`,scheduleExpression:o,functionArn:this.config.schedulerLambdaArn,input:JSON.stringify({scheduledSmsId:r,bucket:t,key:i})})}return s}async getScheduledMessages(){let e=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!e)throw Error("Scheduled bucket not configured");let t=await this.s3.list({bucket:e,prefix:this.config.scheduledPrefix||"sms/scheduled/",maxKeys:1000}),r=[];for(let i of t||[]){if(!i.Key)continue;try{let s=await this.s3.getObject(e,i.Key),o=JSON.parse(s);if(o.scheduledAt=new Date(o.scheduledAt),o.createdAt=new Date(o.createdAt),o.sentAt)o.sentAt=new Date(o.sentAt);r.push(o)}catch{}}return r.sort((i,s)=>i.scheduledAt.getTime()-s.scheduledAt.getTime())}async getScheduledMessage(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Scheduled bucket not configured");let r=`${this.config.scheduledPrefix}${e}.json`;try{let i=await this.s3.getObject(t,r),s=JSON.parse(i);if(s.scheduledAt=new Date(s.scheduledAt),s.createdAt=new Date(s.createdAt),s.sentAt)s.sentAt=new Date(s.sentAt);return s}catch{return null}}async cancelScheduledMessage(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Scheduled bucket not configured");let r=`${this.config.scheduledPrefix}${e}.json`,i=await this.getScheduledMessage(e);if(!i)throw Error(`Scheduled SMS ${e} not found`);if(i.status="cancelled",await this.s3.putObject({bucket:t,key:r,body:JSON.stringify(i,null,2),contentType:"application/json"}),this.scheduler)try{await this.scheduler.deleteRule(`sms-${e}`,!0)}catch{}}async sendScheduledMessage(e){let t=await this.getScheduledMessage(e);if(!t)throw Error(`Scheduled SMS ${e} not found`);if(t.status!=="pending")throw Error(`Scheduled SMS ${e} is not pending (status: ${t.status})`);try{let r=await this.send({to:t.to,body:t.body,from:t.from}),i=this.config.scheduledBucket||this.config.inboxBucket,s=`${this.config.scheduledPrefix}${e}.json`;return t.status="sent",t.sentAt=new Date,t.messageId=r.messageId,await this.s3.putObject({bucket:i,key:s,body:JSON.stringify(t,null,2),contentType:"application/json"}),r}catch(r){let i=this.config.scheduledBucket||this.config.inboxBucket,s=`${this.config.scheduledPrefix}${e}.json`;throw t.status="failed",t.error=r.message,await this.s3.putObject({bucket:i,key:s,body:JSON.stringify(t,null,2),contentType:"application/json"}),r}}async sendAt(e,t,r,i){return this.scheduleMessage({to:e,body:t,scheduledAt:r,from:i})}async sendAfter(e,t,r,i){let s=new Date(Date.now()+r*60*1000);return this.scheduleMessage({to:e,body:t,scheduledAt:s,from:i})}async createTemplate(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Templates bucket not configured");let r=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=`sms/templates/${r}.json`,o=(e.body.match(/\{\{(\w+)\}\}/g)||[]).map((u)=>u.replace(/\{\{|\}\}/g,"")),c={id:r,name:e.name,body:e.body,description:e.description,variables:[...new Set(o)],createdAt:new Date};return await this.s3.putObject({bucket:t,key:i,body:JSON.stringify(c,null,2),contentType:"application/json"}),c}async getTemplates(){let e=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!e)throw Error("Templates bucket not configured");let t=await this.s3.list({bucket:e,prefix:"sms/templates/",maxKeys:1000}),r=[];for(let i of t||[]){if(!i.Key)continue;try{let s=await this.s3.getObject(e,i.Key),o=JSON.parse(s);if(o.createdAt=new Date(o.createdAt),o.updatedAt)o.updatedAt=new Date(o.updatedAt);r.push(o)}catch{}}return r.sort((i,s)=>i.name.localeCompare(s.name))}async getTemplate(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)return null;let r=`sms/templates/${e}.json`;try{let i=await this.s3.getObject(t,r),s=JSON.parse(i);if(s.createdAt=new Date(s.createdAt),s.updatedAt)s.updatedAt=new Date(s.updatedAt);return s}catch{return null}}async getTemplateByName(e){return(await this.getTemplates()).find((r)=>r.name===e)||null}async updateTemplate(e,t){let r=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!r)throw Error("Templates bucket not configured");let i=await this.getTemplate(e);if(!i)throw Error(`Template ${e} not found`);if(t.name)i.name=t.name;if(t.body){i.body=t.body;let o=t.body.match(/\{\{(\w+)\}\}/g)||[];i.variables=[...new Set(o.map((c)=>c.replace(/\{\{|\}\}/g,"")))]}if(t.description!==void 0)i.description=t.description;i.updatedAt=new Date;let s=`sms/templates/${e}.json`;return await this.s3.putObject({bucket:r,key:s,body:JSON.stringify(i,null,2),contentType:"application/json"}),i}async deleteTemplate(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Templates bucket not configured");await this.s3.deleteObject(t,`sms/templates/${e}.json`)}async sendTemplate(e,t,r,i){let s=await this.getTemplate(t);if(!s)throw Error(`Template ${t} not found`);let o=this.applyTemplate(s.body,r);return this.send({to:e,body:o,from:i})}applyTemplate(e,t){return e.replace(/\{\{(\w+)\}\}/g,(r,i)=>t[i]!==void 0?t[i]:r)}async storeDeliveryReceipt(e){let t=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Receipt bucket not configured");let r=e.timestamp||new Date,i=`${this.config.receiptPrefix}${r.toISOString().split("T")[0]}/${e.messageId}.json`,s={messageId:e.messageId,status:e.status,timestamp:r,to:e.to,from:e.from,errorCode:e.errorCode,errorMessage:e.errorMessage,carrierName:e.carrierName,priceInUsd:e.priceInUsd,messagePartCount:e.messagePartCount,raw:e.raw};return await this.s3.putObject({bucket:t,key:i,body:JSON.stringify(s,null,2),contentType:"application/json"}),i}async getDeliveryReceipt(e){let t=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!t)return null;let r=new Date;for(let i=0;i<7;i++){let s=new Date(r);s.setDate(s.getDate()-i);let o=s.toISOString().split("T")[0],c=`${this.config.receiptPrefix}${o}/${e}.json`;try{let u=await this.s3.getObject(t,c),g=JSON.parse(u);return g.timestamp=new Date(g.timestamp),g}catch{}}return null}async getDeliveryReceipts(e={}){let t=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Receipt bucket not configured");let r=await this.s3.list({bucket:t,prefix:this.config.receiptPrefix,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key||!s.Key.endsWith(".json"))continue;try{let o=await this.s3.getObject(t,s.Key),c=JSON.parse(o);if(c.timestamp=new Date(c.timestamp),e.status&&c.status!==e.status)continue;i.push(c)}catch{}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getDeliveryStatus(e){return(await this.getDeliveryReceipt(e))?.status||"unknown"}async waitForDelivery(e,t={}){let r=t.timeoutMs||30000,i=t.pollIntervalMs||1000,s=Date.now();while(Date.now()-s<r){let o=await this.getDeliveryReceipt(e);if(o&&(o.status==="delivered"||o.status==="failed"))return o;await new Promise((c)=>setTimeout(c,i))}return await this.getDeliveryReceipt(e)}async getFailedMessages(e=100){return this.getDeliveryReceipts({maxResults:e,status:"failed"})}async getDeliveryStats(e={}){let t=await this.getDeliveryReceipts({maxResults:e.maxMessages||1000}),r=e.since||new Date(0),i=t.filter((m)=>m.timestamp>=r),s=i.filter((m)=>m.status==="delivered").length,o=i.filter((m)=>m.status==="failed").length,c=i.filter((m)=>m.status==="pending"||m.status==="sent").length,u=i.filter((m)=>m.priceInUsd!==void 0).map((m)=>m.priceInUsd),g=u.length>0?u.reduce((m,d)=>m+d,0)/u.length:0;return{total:i.length,delivered:s,failed:o,pending:c,deliveryRate:i.length>0?s/i.length:0,averagePriceUsd:g}}async sendAndTrack(e){let t=await this.send(e);return{messageId:t.messageId,trackDelivery:()=>this.getDeliveryReceipt(t.messageId),waitForDelivery:(r)=>this.waitForDelivery(t.messageId,{timeoutMs:r})}}parseIncomingSms(e,t){try{let r=JSON.parse(e);if(r.Type==="Notification"&&r.Message){let i=JSON.parse(r.Message);return this.extractSmsFields(i,t,r.Timestamp)}return this.extractSmsFields(r,t)}catch{return{key:t,from:"unknown",to:"unknown",body:e,timestamp:new Date}}}extractSmsFields(e,t,r){return{key:t,from:e.from||e.originationNumber||e.OriginationNumber||e.sourceNumber||"unknown",to:e.to||e.destinationNumber||e.DestinationNumber||e.destinationAddress||"unknown",body:e.body||e.message||e.messageBody||e.Message||e.text||"",timestamp:new Date(r||e.timestamp||e.Timestamp||Date.now()),messageId:e.messageId||e.MessageId||e.inboundMessageId,originationNumber:e.originationNumber||e.OriginationNumber,destinationNumber:e.destinationNumber||e.DestinationNumber,raw:e}}}function KA(e){let t=new St({region:e.region||"us-east-1",inboxBucket:e.bucket,inboxPrefix:e.prefix||"sms/inbox/"});return async(r)=>{if(console.log("Incoming SMS event:",JSON.stringify(r)),r.Records){for(let i of r.Records)if(i.Sns){let s=i.Sns,o;try{o=JSON.parse(s.Message)}catch{o={body:s.Message}}let c={from:o.originationNumber||o.from||"unknown",to:o.destinationNumber||o.to||"unknown",body:o.messageBody||o.body||o.message||"",messageId:o.inboundMessageId||s.MessageId,timestamp:new Date(s.Timestamp),raw:o},u=await t.storeIncomingSms(c);if(console.log(`Stored incoming SMS: ${u}`),e.onMessage){let g=await t.getMessage(u);if(g)await e.onMessage(g)}}}return{statusCode:200,body:JSON.stringify({message:"SMS processed"})}}}function WA(e){let t=new St({region:e.region||"us-east-1",scheduledBucket:e.bucket,scheduledPrefix:e.scheduledPrefix||"sms/scheduled/"});return async(r)=>{console.log("Scheduled SMS event:",JSON.stringify(r));let{scheduledSmsId:i}=r;if(!i)return console.error("Missing scheduledSmsId in event"),{statusCode:400,body:JSON.stringify({error:"Missing scheduledSmsId"})};try{let s=await t.sendScheduledMessage(i);if(console.log(`Sent scheduled SMS ${i}: ${s.messageId}`),e.onSent){let o=await t.getScheduledMessage(i);if(o)await e.onSent(o)}return{statusCode:200,body:JSON.stringify({messageId:s.messageId})}}catch(s){if(console.error(`Failed to send scheduled SMS ${i}:`,s.message),e.onError){let o=await t.getScheduledMessage(i);if(o)await e.onError(o,s)}return{statusCode:500,body:JSON.stringify({error:s.message})}}}}function JA(e){return new St(e)}function XA(e){let t=new St({region:e.region||"us-east-1",receiptBucket:e.bucket,receiptPrefix:e.receiptPrefix||"sms/receipts/"});return async(r)=>{console.log("Delivery receipt event:",JSON.stringify(r));let i=[];if(r.Records){for(let s of r.Records)if(s.Sns){let o=s.Sns,c;try{c=JSON.parse(o.Message)}catch{c=o.Message}let u=Ae(c,o);if(u)i.push(u)}}if(r.notification?.messageId){let s=Ee(r);if(s)i.push(s)}for(let s of i){if(await t.storeDeliveryReceipt(s),console.log(`Stored delivery receipt: ${s.messageId} - ${s.status}`),e.onReceipt)await e.onReceipt(s);if(s.status==="delivered"&&e.onDelivered)await e.onDelivered(s);if(s.status==="failed"&&e.onFailed)await e.onFailed(s);if(e.webhookUrl)await xe(e.webhookUrl,s,e.webhookSecret)}return{statusCode:200,body:JSON.stringify({processed:i.length})}}}function Ae(e,t){if(e.status!==void 0&&e.PhoneNumber){let r=e.status==="SUCCESS"?"delivered":e.status==="FAILURE"?"failed":e.status==="PENDING"?"pending":"unknown";return{messageId:e.messageId||t.MessageId,status:r,timestamp:new Date(e.timestamp||t.Timestamp),to:e.PhoneNumber||e.destination||"",from:e.SenderId,errorCode:e.providerResponse?.statusCode,errorMessage:e.providerResponse?.statusMessage||e.providerResponse?.errorMessage,carrierName:e.providerResponse?.carrierName,priceInUsd:e.priceInUSD,messagePartCount:e.numberOfMessageParts,raw:e}}if(e.messageId)return{messageId:e.messageId,status:J(e.status||e.deliveryStatus||"unknown"),timestamp:new Date(e.timestamp||t?.Timestamp||Date.now()),to:e.to||e.destination||e.phoneNumber||"",from:e.from||e.source,errorCode:e.errorCode,errorMessage:e.errorMessage||e.error,raw:e};return null}function Ee(e){let t=e.notification;return{messageId:t.messageId,status:J(t.status),timestamp:new Date(t.timestamp||Date.now()),to:e.destination||t.destination,from:t.senderId,errorCode:t.providerResponse?.statusCode,errorMessage:t.providerResponse?.statusMessage,carrierName:t.providerResponse?.carrierName,priceInUsd:t.priceInUSD,messagePartCount:t.numberOfMessageParts,raw:e}}function J(e){let t=(e||"").toUpperCase();if(t==="DELIVERED"||t==="SUCCESS"||t==="TEXT_DELIVERED")return"delivered";if(t==="FAILED"||t==="FAILURE"||t==="TEXT_FAILED")return"failed";if(t==="SENT"||t==="TEXT_SENT")return"sent";if(t==="PENDING"||t==="QUEUED")return"pending";return"unknown"}async function xe(e,t,r){let i=JSON.stringify(t),s={"Content-Type":"application/json"};if(r){let o=await import("node:crypto"),c=o.createHmac("sha256",r).update(i).digest("hex");s["X-SMS-Signature"]=c,s["X-SMS-Timestamp"]=Date.now().toString()}try{let o=await fetch(e,{method:"POST",headers:s,body:i});if(!o.ok)console.error(`Webhook failed: ${o.status} ${o.statusText}`)}catch(o){console.error(`Webhook error: ${o.message}`)}}function re(e){if(!e)return"";let t=e.replace(/[^\d+]/g,"");if(!t.startsWith("+")){if(t.length===10)t=`+1${t}`;else if(t.length===11&&t.startsWith("1"))t=`+${t}`}return t}function YA(e,t="national"){let r=re(e);if(t==="e164")return r;if(r.startsWith("+1")&&r.length===12){let i=r.slice(2),s=i.slice(0,3),o=i.slice(3,6),c=i.slice(6);if(t==="national")return`(${s}) ${o}-${c}`;return`+1 (${s}) ${o}-${c}`}return r}function ZA(e){let t=re(e);if(!t.startsWith("+"))return!1;let r=t.slice(1);if(r.length<10||r.length>15)return!1;return/^\d+$/.test(r)}function ey(e){let t=re(e);if(!t.startsWith("+"))return null;let r={"1":"US/CA","7":"RU/KZ","20":"EG","27":"ZA","30":"GR","31":"NL","32":"BE","33":"FR","34":"ES","36":"HU","39":"IT","40":"RO","41":"CH","43":"AT","44":"GB","45":"DK","46":"SE","47":"NO","48":"PL","49":"DE","52":"MX","54":"AR","55":"BR","56":"CL","57":"CO","60":"MY","61":"AU","62":"ID","63":"PH","64":"NZ","65":"SG","66":"TH","81":"JP","82":"KR","84":"VN","86":"CN","90":"TR","91":"IN","92":"PK","93":"AF","94":"LK","98":"IR"},i=t.slice(1);for(let s of[1,2,3]){let o=i.slice(0,s);if(r[o])return r[o]}return null}function ty(e,t){return re(e)===re(t)}class er{config;connect;s3;transcribe;constructor(e={}){if(this.config={region:"us-east-1",voicemailPrefix:"voicemail/",recordingsPrefix:"recordings/",transcriptionLanguage:"en-US",...e},this.config.connectInstanceId)this.connect=new rn(this.config.region);if(this.config.voicemailBucket)this.s3=new a(this.config.region);if(this.config.enableTranscription)this.transcribe=new nn(this.config.region)}async call(e){if(!this.connect||!this.config.connectInstanceId)throw Error("Connect instance ID required for voice calls. Set connectInstanceId in config.");let t=e.from||this.config.defaultCallerId,r=e.contactFlowId||this.config.connectContactFlowId;if(!r)throw Error("Contact flow ID required for Connect calls");return{callId:(await this.connect.makeCall({instanceId:this.config.connectInstanceId,contactFlowId:r,to:e.to,from:t,attributes:e.attributes})).ContactId||""}}async sendVoiceMessage(e){return{messageId:(await this.call({to:e.to,from:e.from,attributes:{message:e.message,voiceId:e.voiceId||"Joanna",languageCode:e.languageCode||"en-US"}})).callId}}async speak(e,t,r){return this.sendVoiceMessage({to:e,message:t,voiceId:r})}async getVoicemails(e={}){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.prefix||this.config.voicemailPrefix||"voicemail/",r=await this.s3.list({bucket:this.config.voicemailBucket,prefix:t,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key)continue;if(s.Key.endsWith(".json"))continue;try{let o=await this.getVoicemailMetadata(s.Key);if(o)i.push({...o,size:s.Size})}catch(o){console.error(`Failed to read voicemail ${s.Key}:`,o)}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return this.getVoicemailMetadata(e)}async getVoicemailAudioUrl(e,t=3600){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:e,expiresIn:t})}async deleteVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");await this.s3.deleteObject(this.config.voicemailBucket,e);let t=e.replace(/\.[^/.]+$/,".json");try{await this.s3.deleteObject(this.config.voicemailBucket,t)}catch{}}async archiveVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=`voicemail/archive/${e.split("/").pop()||`${Date.now()}.wav`}`;return await this.s3.copyObject({sourceBucket:this.config.voicemailBucket,sourceKey:e,destinationBucket:this.config.voicemailBucket,destinationKey:r}),await this.s3.deleteObject(this.config.voicemailBucket,e),r}async getVoicemailCount(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return(await this.s3.list({bucket:this.config.voicemailBucket,prefix:this.config.voicemailPrefix||"voicemail/",maxKeys:1000})||[]).filter((t)=>t.Key&&!t.Key.endsWith(".json")&&!t.Key.endsWith("/")).length}async getUnreadCount(){return(await this.getVoicemails({maxResults:1000})).filter((t)=>!t.read).length}async markAsRead(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.replace(/\.[^/.]+$/,".json");try{let r=await this.s3.getObject(this.config.voicemailBucket,t),i=JSON.parse(r);i.read=!0,i.readAt=new Date().toISOString(),await this.s3.putObject({bucket:this.config.voicemailBucket,key:t,body:JSON.stringify(i,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:t,body:JSON.stringify({read:!0,readAt:new Date().toISOString()},null,2),contentType:"application/json"})}}async markAsUnread(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.replace(/\.[^/.]+$/,".json");try{let r=await this.s3.getObject(this.config.voicemailBucket,t),i=JSON.parse(r);i.read=!1,delete i.readAt,await this.s3.putObject({bucket:this.config.voicemailBucket,key:t,body:JSON.stringify(i,null,2),contentType:"application/json"})}catch{}}async markManyAsRead(e){await Promise.all(e.map((t)=>this.markAsRead(t)))}async deleteMany(e){await Promise.all(e.map((t)=>this.deleteVoicemail(t)))}async transcribeVoicemail(e){if(!this.transcribe)throw Error("Transcription not enabled. Set enableTranscription: true in config");if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=`voicemail-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=`s3://${this.config.voicemailBucket}/${e}`,i=e.split(".").pop()?.toLowerCase(),s=i==="mp3"?"mp3":i==="wav"?"wav":"wav";await this.transcribe.startTranscriptionJob({TranscriptionJobName:t,LanguageCode:this.config.transcriptionLanguage||"en-US",Media:{MediaFileUri:r},MediaFormat:s,OutputBucketName:this.config.voicemailBucket,OutputKey:e.replace(/\.[^/.]+$/,"-transcript.json")});let o=e.replace(/\.[^/.]+$/,".json");try{let c=await this.s3.getObject(this.config.voicemailBucket,o),u=JSON.parse(c);u.transcriptionJobName=t,u.transcriptionStatus="processing",await this.s3.putObject({bucket:this.config.voicemailBucket,key:o,body:JSON.stringify(u,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:o,body:JSON.stringify({transcriptionJobName:t,transcriptionStatus:"processing"},null,2),contentType:"application/json"})}return{jobName:t}}async getTranscriptionStatus(e){if(!this.transcribe)throw Error("Transcription not enabled");let t=await this.transcribe.getTranscriptionJob({TranscriptionJobName:e}),r=t.TranscriptionJob?.TranscriptionJobStatus;if(r==="COMPLETED"&&t.TranscriptionJob?.Transcript?.TranscriptFileUri){let i=t.TranscriptionJob.Transcript.TranscriptFileUri;try{if(this.s3&&this.config.voicemailBucket&&i.includes(this.config.voicemailBucket)){let s=i.split(this.config.voicemailBucket+"/")[1];if(s){let o=await this.s3.getObject(this.config.voicemailBucket,s);return{status:"COMPLETED",transcription:JSON.parse(o).results?.transcripts?.[0]?.transcript||""}}}}catch{}}return{status:r}}async updateTranscription(e,t){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=e.replace(/\.[^/.]+$/,".json");try{let i=await this.s3.getObject(this.config.voicemailBucket,r),s=JSON.parse(i);s.transcription=t,s.transcriptionStatus="completed",await this.s3.putObject({bucket:this.config.voicemailBucket,key:r,body:JSON.stringify(s,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:r,body:JSON.stringify({transcription:t,transcriptionStatus:"completed"},null,2),contentType:"application/json"})}}async createGreeting(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r;if(e.audioData)r=`greetings/${t}.wav`,await this.s3.putObject({bucket:this.config.voicemailBucket,key:r,body:e.audioData,contentType:"audio/wav"});let i={id:t,name:e.name,type:e.type,text:e.text,audioKey:r,voiceId:e.voiceId||"Joanna",languageCode:e.languageCode||"en-US",isActive:e.setActive||!1,createdAt:new Date};if(e.setActive)await this.deactivateGreetingsOfType(e.type),i.isActive=!0;return await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${t}.json`,body:JSON.stringify(i,null,2),contentType:"application/json"}),i}async getGreetings(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let e=await this.s3.list({bucket:this.config.voicemailBucket,prefix:"greetings/",maxKeys:100}),t=[];for(let r of e||[]){if(!r.Key||!r.Key.endsWith(".json"))continue;try{let i=await this.s3.getObject(this.config.voicemailBucket,r.Key),s=JSON.parse(i);if(s.createdAt=new Date(s.createdAt),s.updatedAt)s.updatedAt=new Date(s.updatedAt);t.push(s)}catch{}}return t.sort((r,i)=>r.name.localeCompare(i.name))}async getGreeting(e){if(!this.s3||!this.config.voicemailBucket)return null;try{let t=await this.s3.getObject(this.config.voicemailBucket,`greetings/${e}.json`),r=JSON.parse(t);if(r.createdAt=new Date(r.createdAt),r.updatedAt)r.updatedAt=new Date(r.updatedAt);return r}catch{return null}}async getActiveGreeting(e){return(await this.getGreetings()).find((r)=>r.type===e&&r.isActive)||null}async setActiveGreeting(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=await this.getGreeting(e);if(!t)throw Error(`Greeting ${e} not found`);await this.deactivateGreetingsOfType(t.type),t.isActive=!0,t.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${e}.json`,body:JSON.stringify(t,null,2),contentType:"application/json"})}async deactivateGreetingsOfType(e){let t=await this.getGreetings();for(let r of t)if(r.type===e&&r.isActive)r.isActive=!1,r.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${r.id}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"})}async updateGreeting(e,t){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=await this.getGreeting(e);if(!r)throw Error(`Greeting ${e} not found`);if(t.name)r.name=t.name;if(t.text)r.text=t.text;if(t.audioData){let i=`greetings/${e}.wav`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:i,body:t.audioData,contentType:"audio/wav"}),r.audioKey=i}return r.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${e}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"}),r}async deleteGreeting(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=await this.getGreeting(e);if(t?.audioKey)try{await this.s3.deleteObject(this.config.voicemailBucket,t.audioKey)}catch{}await this.s3.deleteObject(this.config.voicemailBucket,`greetings/${e}.json`)}async getGreetingAudioUrl(e,t=3600){let r=await this.getGreeting(e);if(!r?.audioKey||!this.s3||!this.config.voicemailBucket)return null;return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:r.audioKey,expiresIn:t})}async createForwardingRule(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r={id:t,name:e.name,enabled:e.enabled!==!1,condition:e.condition,forwardTo:e.forwardTo,ringTimeout:e.ringTimeout||20,businessHours:e.businessHours,priority:e.priority||100,createdAt:new Date};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:`forwarding/${t}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"}),r}async getForwardingRules(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let e=await this.s3.list({bucket:this.config.voicemailBucket,prefix:"forwarding/",maxKeys:100}),t=[];for(let r of e||[]){if(!r.Key||!r.Key.endsWith(".json"))continue;try{let i=await this.s3.getObject(this.config.voicemailBucket,r.Key),s=JSON.parse(i);if(s.createdAt=new Date(s.createdAt),s.updatedAt)s.updatedAt=new Date(s.updatedAt);t.push(s)}catch{}}return t.sort((r,i)=>r.priority-i.priority)}async getForwardingRule(e){if(!this.s3||!this.config.voicemailBucket)return null;try{let t=await this.s3.getObject(this.config.voicemailBucket,`forwarding/${e}.json`),r=JSON.parse(t);if(r.createdAt=new Date(r.createdAt),r.updatedAt)r.updatedAt=new Date(r.updatedAt);return r}catch{return null}}async updateForwardingRule(e,t){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=await this.getForwardingRule(e);if(!r)throw Error(`Forwarding rule ${e} not found`);if(t.name!==void 0)r.name=t.name;if(t.enabled!==void 0)r.enabled=t.enabled;if(t.condition!==void 0)r.condition=t.condition;if(t.forwardTo!==void 0)r.forwardTo=t.forwardTo;if(t.ringTimeout!==void 0)r.ringTimeout=t.ringTimeout;if(t.businessHours!==void 0)r.businessHours=t.businessHours;if(t.priority!==void 0)r.priority=t.priority;return r.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`forwarding/${e}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"}),r}async setForwardingRuleEnabled(e,t){await this.updateForwardingRule(e,{enabled:t})}async deleteForwardingRule(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");await this.s3.deleteObject(this.config.voicemailBucket,`forwarding/${e}.json`)}async getApplicableForwardingRule(e={}){let t=await this.getForwardingRules(),r=new Date;for(let i of t){if(!i.enabled)continue;switch(i.condition){case"always":return i;case"busy":if(e.isBusy)return i;break;case"no_answer":if(e.noAnswer)return i;break;case"unreachable":if(e.isUnreachable)return i;break;case"after_hours":if(i.businessHours&&!this.isWithinBusinessHours(r,i.businessHours))return i;break}}return null}isWithinBusinessHours(e,t){let i=["sun","mon","tue","wed","thu","fri","sat"][e.getDay()],s=`${e.getHours().toString().padStart(2,"0")}:${e.getMinutes().toString().padStart(2,"0")}`;for(let o of t.schedule)if(o.day===i){if(s>=o.start&&s<=o.end)return!0}return!1}async getRecordings(e={}){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");let t=e.prefix||this.config.recordingsPrefix||"recordings/",r=await this.s3.list({bucket:this.config.voicemailBucket,prefix:t,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key||s.Key.endsWith(".json")||s.Key.endsWith("/"))continue;try{let o=s.Key.replace(/\.[^/.]+$/,".json"),c={};try{let u=await this.s3.getObject(this.config.voicemailBucket,o);c=JSON.parse(u)}catch{}i.push({key:s.Key,contactId:c.contactId||s.Key.split("/").pop()?.split(".")[0]||"",from:c.from,to:c.to,duration:c.duration||0,timestamp:new Date(s.LastModified||Date.now()),contentType:"audio/wav",size:s.Size})}catch(o){console.error(`Failed to read recording ${s.Key}:`,o)}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getRecordingUrl(e,t=3600){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:e,expiresIn:t})}async storeVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.timestamp||new Date,r=`${Date.now()}-${Math.random().toString(36).slice(2)}`,i=e.contentType==="audio/mp3"?"mp3":"wav",s=`${this.config.voicemailPrefix}${t.toISOString().split("T")[0]}/${r}.${i}`,o=`${this.config.voicemailPrefix}${t.toISOString().split("T")[0]}/${r}.json`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:s,body:e.audioData,contentType:e.contentType||"audio/wav"});let c={from:e.from,to:e.to,duration:e.duration||0,transcription:e.transcription,timestamp:t.toISOString(),audioKey:s};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:o,body:JSON.stringify(c,null,2),contentType:"application/json"}),s}async storeRecording(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");let t=e.timestamp||new Date,r=e.contentType==="audio/mp3"?"mp3":"wav",i=`${this.config.recordingsPrefix}${t.toISOString().split("T")[0]}/${e.contactId}.${r}`,s=`${this.config.recordingsPrefix}${t.toISOString().split("T")[0]}/${e.contactId}.json`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:i,body:e.audioData,contentType:e.contentType||"audio/wav"});let o={contactId:e.contactId,from:e.from,to:e.to,duration:e.duration||0,timestamp:t.toISOString(),audioKey:i};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:s,body:JSON.stringify(o,null,2),contentType:"application/json"}),i}async getVoicemailMetadata(e){if(!this.s3||!this.config.voicemailBucket)return null;let t=e.replace(/\.[^/.]+$/,".json");try{let r=await this.s3.getObject(this.config.voicemailBucket,t),i=JSON.parse(r);return{key:e,from:i.from||"unknown",to:i.to||"unknown",duration:i.duration||0,timestamp:new Date(i.timestamp||Date.now()),transcription:i.transcription,contentType:e.endsWith(".mp3")?"audio/mp3":"audio/wav",raw:i}}catch{return{key:e,from:"unknown",to:"unknown",duration:0,timestamp:new Date,contentType:e.endsWith(".mp3")?"audio/mp3":"audio/wav"}}}}function ry(e){let t=new er({region:e.region||"us-east-1",voicemailBucket:e.bucket,voicemailPrefix:e.prefix||"voicemail/"});return async(r)=>{if(console.log("Incoming voicemail event:",JSON.stringify(r)),r.Records){for(let i of r.Records)if(i.s3){let s=i.s3.bucket.name,o=decodeURIComponent(i.s3.object.key.replace(/\+/g," "));if(o.endsWith(".json"))continue;if(console.log(`Processing voicemail: ${s}/${o}`),e.onVoicemail){let c=await t.getVoicemail(o);if(c)await e.onVoicemail(c)}}}if(r.Details?.ContactData){let i=r.Details.ContactData;if(console.log(`Connect voicemail from: ${i.CustomerEndpoint?.Address}`),e.onVoicemail&&r.audioData){let s=await t.storeVoicemail({from:i.CustomerEndpoint?.Address||"unknown",to:i.SystemEndpoint?.Address||"unknown",audioData:r.audioData,duration:r.duration,transcription:r.transcription}),o=await t.getVoicemail(s);if(o)await e.onVoicemail(o)}}return{statusCode:200,body:JSON.stringify({message:"Voicemail processed"})}}}function ny(e){let t=new er({region:e.region||"us-east-1",voicemailBucket:e.bucket,recordingsPrefix:e.prefix||"recordings/"});return async(r)=>{if(console.log("Recording event:",JSON.stringify(r)),r.Records){for(let i of r.Records)if(i.s3){let s=i.s3.bucket.name,o=decodeURIComponent(i.s3.object.key.replace(/\+/g," "));if(o.endsWith(".json"))continue;if(console.log(`Processing recording: ${s}/${o}`),e.onRecording){let c=await t.getRecordings({prefix:o});if(c.length>0)await e.onRecording(c[0])}}}return{statusCode:200,body:JSON.stringify({message:"Recording processed"})}}}function iy(e){return new er(e)}class dn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createCase(e){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.CreateCase"},body:JSON.stringify({subject:e.subject,communicationBody:e.communicationBody,serviceCode:e.serviceCode,categoryCode:e.categoryCode,severityCode:e.severityCode||"normal",ccEmailAddresses:e.ccEmailAddresses,language:e.language||"en",issueType:e.issueType||"customer-service",attachmentSetId:e.attachmentSetId})})}async describeCase(e){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeCases"},body:JSON.stringify({caseIdList:[e],includeResolvedCases:!0,includeCommunications:!0})})).cases?.[0]||null}async listCases(e){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeCases"},body:JSON.stringify({includeResolvedCases:e?.includeResolved??!1,maxResults:e?.maxResults,nextToken:e?.nextToken,includeCommunications:!0})})}async addCommunication(e,t,r){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.AddCommunicationToCase"},body:JSON.stringify({caseId:e,communicationBody:t,ccEmailAddresses:r})})).result??!0}async resolveCase(e){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.ResolveCase"},body:JSON.stringify({caseId:e})})}async describeServices(e){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeServices"},body:JSON.stringify({serviceCodeList:e,language:"en"})})).services||[]}async describeSeverityLevels(){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeSeverityLevels"},body:JSON.stringify({language:"en"})})).severityLevels||[]}}var Ta={smsSandboxExit:(e)=>({subject:"Request to exit SMS sandbox for production use",serviceCode:"service-limit-increase",categoryCode:"service-limit-increase-sms-pinpoint",severityCode:"normal",communicationBody:`Hello,
|
|
30
|
+
`}}async sendEmail(e){try{let t=e.dataBuffer,r=await this.ses.sendRawEmail({source:e.mailFrom,destinations:e.rcptTo,rawMessage:t});if(console.log(`SMTP: Email sent via SES, MessageId: ${r.MessageId}`),this.s3&&this.config.sentBucket)try{let i=`${this.config.sentPrefix||"sent/"}${e.email}/${Date.now()}-${r.MessageId}`;await this.s3.putObject({bucket:this.config.sentBucket,key:i,body:t,contentType:"message/rfc822"}),console.log(`SMTP: Email stored in S3: ${i}`)}catch(i){console.error("SMTP: Failed to store sent email in S3 (email was sent successfully):",i.message)}this.send(e,`250 OK Message accepted, ID: ${r.MessageId}`),this.resetSession(e)}catch(t){console.error("SMTP: Failed to send email:",t.message),this.send(e,`451 Failed to send: ${t.message}`),this.resetSession(e)}}resetSession(e){e.state="ready",e.mailFrom=void 0,e.rcptTo=[],e.dataBuffer=""}}async function zA(e){let t=new Vl(e);return await t.start(),t}class Ct{config;sns;s3;scheduler;constructor(e={}){if(this.config={region:"us-east-1",inboxPrefix:"sms/inbox/",scheduledPrefix:"sms/scheduled/",receiptPrefix:"sms/receipts/",...e},this.sns=new We(this.config.region),this.config.inboxBucket||this.config.scheduledBucket)this.s3=new a(this.config.region);if(this.config.schedulerLambdaArn)this.scheduler=new cn(this.config.region)}async send(e){let{to:t,from:r,type:i,scheduledAt:s,templateId:o,templateVariables:c}=e,u=r||this.config.defaultSender,g=e.body;if(o){let d=await this.getTemplate(o);if(d)g=this.applyTemplate(d.body,c||{})}if(s&&s>new Date)return{messageId:"",scheduledId:(await this.scheduleMessage({to:t,body:g,from:u,scheduledAt:s,templateId:o,templateVariables:c})).id};return{messageId:(await this.sns.publish({PhoneNumber:t,Message:g,MessageAttributes:{"AWS.SNS.SMS.SMSType":{DataType:"String",StringValue:i||"Transactional"},...u&&{"AWS.SNS.SMS.SenderID":{DataType:"String",StringValue:u}}}})).MessageId||""}}async sendText(e,t,r){return this.send({to:e,body:t,from:r})}async getInbox(e={}){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=e.prefix||this.config.inboxPrefix||"sms/inbox/",r=await this.s3.list({bucket:this.config.inboxBucket,prefix:t,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key)continue;try{let o=await this.s3.getObject(this.config.inboxBucket,s.Key),c=this.parseIncomingSms(o,s.Key);if(c)i.push(c)}catch(o){console.error(`Failed to read SMS ${s.Key}:`,o)}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getMessage(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");try{let t=await this.s3.getObject(this.config.inboxBucket,e);return this.parseIncomingSms(t,e)}catch(t){return null}}async deleteMessage(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");await this.s3.deleteObject(this.config.inboxBucket,e)}async moveMessage(e,t){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let r=await this.s3.getObject(this.config.inboxBucket,e),i=e.split("/").pop()||`${Date.now()}.json`,s=`${t}${i}`;return await this.s3.putObject({bucket:this.config.inboxBucket,key:s,body:r,contentType:"application/json"}),await this.s3.deleteObject(this.config.inboxBucket,e),s}async archiveMessage(e){return this.moveMessage(e,"sms/archive/")}async markAsRead(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=await this.s3.getObject(this.config.inboxBucket,e),r=JSON.parse(t);r.read=!0,r.readAt=new Date().toISOString(),await this.s3.putObject({bucket:this.config.inboxBucket,key:e,body:JSON.stringify(r,null,2),contentType:"application/json"})}async markAsUnread(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=await this.s3.getObject(this.config.inboxBucket,e),r=JSON.parse(t);r.read=!1,delete r.readAt,await this.s3.putObject({bucket:this.config.inboxBucket,key:e,body:JSON.stringify(r,null,2),contentType:"application/json"})}async getUnreadCount(){return(await this.getInbox({maxResults:1000})).filter((t)=>!t.read).length}async markManyAsRead(e){await Promise.all(e.map((t)=>this.markAsRead(t)))}async deleteMany(e){await Promise.all(e.map((t)=>this.deleteMessage(t)))}async getInboxCount(){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");return(await this.s3.list({bucket:this.config.inboxBucket,prefix:this.config.inboxPrefix||"sms/inbox/",maxKeys:1000}))?.length||0}getConversationId(e,t){let r=[ne(e),ne(t)].sort();return`${r[0]}_${r[1]}`}async getConversation(e,t){let r=await this.getInbox({maxResults:1000}),i=ne(e);return r.filter((s)=>{let o=ne(s.from),c=ne(s.to);return o===i||c===i}).sort((s,o)=>s.timestamp.getTime()-o.timestamp.getTime())}async getConversations(){let e=await this.getInbox({maxResults:1000}),t=new Map;for(let r of e){let i=ne(r.from);if(!t.has(i))t.set(i,{phoneNumber:i,messages:[]});t.get(i).messages.push(r)}return Array.from(t.values()).map((r)=>({phoneNumber:r.phoneNumber,lastMessage:r.messages[0],messageCount:r.messages.length,unreadCount:r.messages.filter((i)=>!i.read).length})).sort((r,i)=>i.lastMessage.timestamp.getTime()-r.lastMessage.timestamp.getTime())}async storeIncomingSms(e){if(!this.s3||!this.config.inboxBucket)throw Error("Inbox bucket not configured");let t=e.timestamp||new Date,r=e.messageId||`${Date.now()}-${Math.random().toString(36).slice(2)}`,i=`${this.config.inboxPrefix}${t.toISOString().split("T")[0]}/${r}.json`,s={from:e.from,to:e.to,body:e.body,messageId:r,timestamp:t.toISOString(),raw:e.raw};return await this.s3.putObject({bucket:this.config.inboxBucket,key:i,body:JSON.stringify(s,null,2),contentType:"application/json"}),i}async isOptedOut(e){return this.sns.checkIfPhoneNumberIsOptedOut(e)}async getOptedOutNumbers(){return(await this.sns.listPhoneNumbersOptedOut()).phoneNumbers||[]}async optIn(e){await this.sns.optInPhoneNumber(e)}async isInSandbox(){return(await this.sns.getSMSSandboxAccountStatus()).IsInSandbox}async addSandboxNumber(e){await this.sns.createSMSSandboxPhoneNumber(e)}async verifySandboxNumber(e,t){await this.sns.verifySMSSandboxPhoneNumber(e,t)}async listSandboxNumbers(){return(await this.sns.listSMSSandboxPhoneNumbers())?.PhoneNumbers||[]}async scheduleMessage(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Scheduled bucket not configured");let r=`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,i=`${this.config.scheduledPrefix}${r}.json`,s={id:r,to:e.to,body:e.body,from:e.from,scheduledAt:e.scheduledAt,status:"pending",createdAt:new Date,templateId:e.templateId,templateVariables:e.templateVariables};if(await this.s3.putObject({bucket:t,key:i,body:JSON.stringify(s,null,2),contentType:"application/json"}),this.scheduler&&this.config.schedulerLambdaArn&&this.config.schedulerRoleArn){let o=`at(${e.scheduledAt.toISOString().replace(/\.\d{3}Z$/,"")})`;await this.scheduler.createLambdaSchedule({name:`sms-${r}`,scheduleExpression:o,functionArn:this.config.schedulerLambdaArn,input:JSON.stringify({scheduledSmsId:r,bucket:t,key:i})})}return s}async getScheduledMessages(){let e=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!e)throw Error("Scheduled bucket not configured");let t=await this.s3.list({bucket:e,prefix:this.config.scheduledPrefix||"sms/scheduled/",maxKeys:1000}),r=[];for(let i of t||[]){if(!i.Key)continue;try{let s=await this.s3.getObject(e,i.Key),o=JSON.parse(s);if(o.scheduledAt=new Date(o.scheduledAt),o.createdAt=new Date(o.createdAt),o.sentAt)o.sentAt=new Date(o.sentAt);r.push(o)}catch{}}return r.sort((i,s)=>i.scheduledAt.getTime()-s.scheduledAt.getTime())}async getScheduledMessage(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Scheduled bucket not configured");let r=`${this.config.scheduledPrefix}${e}.json`;try{let i=await this.s3.getObject(t,r),s=JSON.parse(i);if(s.scheduledAt=new Date(s.scheduledAt),s.createdAt=new Date(s.createdAt),s.sentAt)s.sentAt=new Date(s.sentAt);return s}catch{return null}}async cancelScheduledMessage(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Scheduled bucket not configured");let r=`${this.config.scheduledPrefix}${e}.json`,i=await this.getScheduledMessage(e);if(!i)throw Error(`Scheduled SMS ${e} not found`);if(i.status="cancelled",await this.s3.putObject({bucket:t,key:r,body:JSON.stringify(i,null,2),contentType:"application/json"}),this.scheduler)try{await this.scheduler.deleteRule(`sms-${e}`,!0)}catch{}}async sendScheduledMessage(e){let t=await this.getScheduledMessage(e);if(!t)throw Error(`Scheduled SMS ${e} not found`);if(t.status!=="pending")throw Error(`Scheduled SMS ${e} is not pending (status: ${t.status})`);try{let r=await this.send({to:t.to,body:t.body,from:t.from}),i=this.config.scheduledBucket||this.config.inboxBucket,s=`${this.config.scheduledPrefix}${e}.json`;return t.status="sent",t.sentAt=new Date,t.messageId=r.messageId,await this.s3.putObject({bucket:i,key:s,body:JSON.stringify(t,null,2),contentType:"application/json"}),r}catch(r){let i=this.config.scheduledBucket||this.config.inboxBucket,s=`${this.config.scheduledPrefix}${e}.json`;throw t.status="failed",t.error=r.message,await this.s3.putObject({bucket:i,key:s,body:JSON.stringify(t,null,2),contentType:"application/json"}),r}}async sendAt(e,t,r,i){return this.scheduleMessage({to:e,body:t,scheduledAt:r,from:i})}async sendAfter(e,t,r,i){let s=new Date(Date.now()+r*60*1000);return this.scheduleMessage({to:e,body:t,scheduledAt:s,from:i})}async createTemplate(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Templates bucket not configured");let r=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,i=`sms/templates/${r}.json`,o=(e.body.match(/\{\{(\w+)\}\}/g)||[]).map((u)=>u.replace(/\{\{|\}\}/g,"")),c={id:r,name:e.name,body:e.body,description:e.description,variables:[...new Set(o)],createdAt:new Date};return await this.s3.putObject({bucket:t,key:i,body:JSON.stringify(c,null,2),contentType:"application/json"}),c}async getTemplates(){let e=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!e)throw Error("Templates bucket not configured");let t=await this.s3.list({bucket:e,prefix:"sms/templates/",maxKeys:1000}),r=[];for(let i of t||[]){if(!i.Key)continue;try{let s=await this.s3.getObject(e,i.Key),o=JSON.parse(s);if(o.createdAt=new Date(o.createdAt),o.updatedAt)o.updatedAt=new Date(o.updatedAt);r.push(o)}catch{}}return r.sort((i,s)=>i.name.localeCompare(s.name))}async getTemplate(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)return null;let r=`sms/templates/${e}.json`;try{let i=await this.s3.getObject(t,r),s=JSON.parse(i);if(s.createdAt=new Date(s.createdAt),s.updatedAt)s.updatedAt=new Date(s.updatedAt);return s}catch{return null}}async getTemplateByName(e){return(await this.getTemplates()).find((r)=>r.name===e)||null}async updateTemplate(e,t){let r=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!r)throw Error("Templates bucket not configured");let i=await this.getTemplate(e);if(!i)throw Error(`Template ${e} not found`);if(t.name)i.name=t.name;if(t.body){i.body=t.body;let o=t.body.match(/\{\{(\w+)\}\}/g)||[];i.variables=[...new Set(o.map((c)=>c.replace(/\{\{|\}\}/g,"")))]}if(t.description!==void 0)i.description=t.description;i.updatedAt=new Date;let s=`sms/templates/${e}.json`;return await this.s3.putObject({bucket:r,key:s,body:JSON.stringify(i,null,2),contentType:"application/json"}),i}async deleteTemplate(e){let t=this.config.scheduledBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Templates bucket not configured");await this.s3.deleteObject(t,`sms/templates/${e}.json`)}async sendTemplate(e,t,r,i){let s=await this.getTemplate(t);if(!s)throw Error(`Template ${t} not found`);let o=this.applyTemplate(s.body,r);return this.send({to:e,body:o,from:i})}applyTemplate(e,t){return e.replace(/\{\{(\w+)\}\}/g,(r,i)=>t[i]!==void 0?t[i]:r)}async storeDeliveryReceipt(e){let t=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Receipt bucket not configured");let r=e.timestamp||new Date,i=`${this.config.receiptPrefix}${r.toISOString().split("T")[0]}/${e.messageId}.json`,s={messageId:e.messageId,status:e.status,timestamp:r,to:e.to,from:e.from,errorCode:e.errorCode,errorMessage:e.errorMessage,carrierName:e.carrierName,priceInUsd:e.priceInUsd,messagePartCount:e.messagePartCount,raw:e.raw};return await this.s3.putObject({bucket:t,key:i,body:JSON.stringify(s,null,2),contentType:"application/json"}),i}async getDeliveryReceipt(e){let t=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!t)return null;let r=new Date;for(let i=0;i<7;i++){let s=new Date(r);s.setDate(s.getDate()-i);let o=s.toISOString().split("T")[0],c=`${this.config.receiptPrefix}${o}/${e}.json`;try{let u=await this.s3.getObject(t,c),g=JSON.parse(u);return g.timestamp=new Date(g.timestamp),g}catch{}}return null}async getDeliveryReceipts(e={}){let t=this.config.receiptBucket||this.config.inboxBucket;if(!this.s3||!t)throw Error("Receipt bucket not configured");let r=await this.s3.list({bucket:t,prefix:this.config.receiptPrefix,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key||!s.Key.endsWith(".json"))continue;try{let o=await this.s3.getObject(t,s.Key),c=JSON.parse(o);if(c.timestamp=new Date(c.timestamp),e.status&&c.status!==e.status)continue;i.push(c)}catch{}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getDeliveryStatus(e){return(await this.getDeliveryReceipt(e))?.status||"unknown"}async waitForDelivery(e,t={}){let r=t.timeoutMs||30000,i=t.pollIntervalMs||1000,s=Date.now();while(Date.now()-s<r){let o=await this.getDeliveryReceipt(e);if(o&&(o.status==="delivered"||o.status==="failed"))return o;await new Promise((c)=>setTimeout(c,i))}return await this.getDeliveryReceipt(e)}async getFailedMessages(e=100){return this.getDeliveryReceipts({maxResults:e,status:"failed"})}async getDeliveryStats(e={}){let t=await this.getDeliveryReceipts({maxResults:e.maxMessages||1000}),r=e.since||new Date(0),i=t.filter((m)=>m.timestamp>=r),s=i.filter((m)=>m.status==="delivered").length,o=i.filter((m)=>m.status==="failed").length,c=i.filter((m)=>m.status==="pending"||m.status==="sent").length,u=i.filter((m)=>m.priceInUsd!==void 0).map((m)=>m.priceInUsd),g=u.length>0?u.reduce((m,d)=>m+d,0)/u.length:0;return{total:i.length,delivered:s,failed:o,pending:c,deliveryRate:i.length>0?s/i.length:0,averagePriceUsd:g}}async sendAndTrack(e){let t=await this.send(e);return{messageId:t.messageId,trackDelivery:()=>this.getDeliveryReceipt(t.messageId),waitForDelivery:(r)=>this.waitForDelivery(t.messageId,{timeoutMs:r})}}parseIncomingSms(e,t){try{let r=JSON.parse(e);if(r.Type==="Notification"&&r.Message){let i=JSON.parse(r.Message);return this.extractSmsFields(i,t,r.Timestamp)}return this.extractSmsFields(r,t)}catch{return{key:t,from:"unknown",to:"unknown",body:e,timestamp:new Date}}}extractSmsFields(e,t,r){return{key:t,from:e.from||e.originationNumber||e.OriginationNumber||e.sourceNumber||"unknown",to:e.to||e.destinationNumber||e.DestinationNumber||e.destinationAddress||"unknown",body:e.body||e.message||e.messageBody||e.Message||e.text||"",timestamp:new Date(r||e.timestamp||e.Timestamp||Date.now()),messageId:e.messageId||e.MessageId||e.inboundMessageId,originationNumber:e.originationNumber||e.OriginationNumber,destinationNumber:e.destinationNumber||e.DestinationNumber,raw:e}}}function KA(e){let t=new Ct({region:e.region||"us-east-1",inboxBucket:e.bucket,inboxPrefix:e.prefix||"sms/inbox/"});return async(r)=>{if(console.log("Incoming SMS event:",JSON.stringify(r)),r.Records){for(let i of r.Records)if(i.Sns){let s=i.Sns,o;try{o=JSON.parse(s.Message)}catch{o={body:s.Message}}let c={from:o.originationNumber||o.from||"unknown",to:o.destinationNumber||o.to||"unknown",body:o.messageBody||o.body||o.message||"",messageId:o.inboundMessageId||s.MessageId,timestamp:new Date(s.Timestamp),raw:o},u=await t.storeIncomingSms(c);if(console.log(`Stored incoming SMS: ${u}`),e.onMessage){let g=await t.getMessage(u);if(g)await e.onMessage(g)}}}return{statusCode:200,body:JSON.stringify({message:"SMS processed"})}}}function WA(e){let t=new Ct({region:e.region||"us-east-1",scheduledBucket:e.bucket,scheduledPrefix:e.scheduledPrefix||"sms/scheduled/"});return async(r)=>{console.log("Scheduled SMS event:",JSON.stringify(r));let{scheduledSmsId:i}=r;if(!i)return console.error("Missing scheduledSmsId in event"),{statusCode:400,body:JSON.stringify({error:"Missing scheduledSmsId"})};try{let s=await t.sendScheduledMessage(i);if(console.log(`Sent scheduled SMS ${i}: ${s.messageId}`),e.onSent){let o=await t.getScheduledMessage(i);if(o)await e.onSent(o)}return{statusCode:200,body:JSON.stringify({messageId:s.messageId})}}catch(s){if(console.error(`Failed to send scheduled SMS ${i}:`,s.message),e.onError){let o=await t.getScheduledMessage(i);if(o)await e.onError(o,s)}return{statusCode:500,body:JSON.stringify({error:s.message})}}}}function JA(e){return new Ct(e)}function XA(e){let t=new Ct({region:e.region||"us-east-1",receiptBucket:e.bucket,receiptPrefix:e.receiptPrefix||"sms/receipts/"});return async(r)=>{console.log("Delivery receipt event:",JSON.stringify(r));let i=[];if(r.Records){for(let s of r.Records)if(s.Sns){let o=s.Sns,c;try{c=JSON.parse(o.Message)}catch{c=o.Message}let u=Ae(c,o);if(u)i.push(u)}}if(r.notification?.messageId){let s=Ee(r);if(s)i.push(s)}for(let s of i){if(await t.storeDeliveryReceipt(s),console.log(`Stored delivery receipt: ${s.messageId} - ${s.status}`),e.onReceipt)await e.onReceipt(s);if(s.status==="delivered"&&e.onDelivered)await e.onDelivered(s);if(s.status==="failed"&&e.onFailed)await e.onFailed(s);if(e.webhookUrl)await xe(e.webhookUrl,s,e.webhookSecret)}return{statusCode:200,body:JSON.stringify({processed:i.length})}}}function Ae(e,t){if(e.status!==void 0&&e.PhoneNumber){let r=e.status==="SUCCESS"?"delivered":e.status==="FAILURE"?"failed":e.status==="PENDING"?"pending":"unknown";return{messageId:e.messageId||t.MessageId,status:r,timestamp:new Date(e.timestamp||t.Timestamp),to:e.PhoneNumber||e.destination||"",from:e.SenderId,errorCode:e.providerResponse?.statusCode,errorMessage:e.providerResponse?.statusMessage||e.providerResponse?.errorMessage,carrierName:e.providerResponse?.carrierName,priceInUsd:e.priceInUSD,messagePartCount:e.numberOfMessageParts,raw:e}}if(e.messageId)return{messageId:e.messageId,status:J(e.status||e.deliveryStatus||"unknown"),timestamp:new Date(e.timestamp||t?.Timestamp||Date.now()),to:e.to||e.destination||e.phoneNumber||"",from:e.from||e.source,errorCode:e.errorCode,errorMessage:e.errorMessage||e.error,raw:e};return null}function Ee(e){let t=e.notification;return{messageId:t.messageId,status:J(t.status),timestamp:new Date(t.timestamp||Date.now()),to:e.destination||t.destination,from:t.senderId,errorCode:t.providerResponse?.statusCode,errorMessage:t.providerResponse?.statusMessage,carrierName:t.providerResponse?.carrierName,priceInUsd:t.priceInUSD,messagePartCount:t.numberOfMessageParts,raw:e}}function J(e){let t=(e||"").toUpperCase();if(t==="DELIVERED"||t==="SUCCESS"||t==="TEXT_DELIVERED")return"delivered";if(t==="FAILED"||t==="FAILURE"||t==="TEXT_FAILED")return"failed";if(t==="SENT"||t==="TEXT_SENT")return"sent";if(t==="PENDING"||t==="QUEUED")return"pending";return"unknown"}async function xe(e,t,r){let i=JSON.stringify(t),s={"Content-Type":"application/json"};if(r){let o=await import("node:crypto"),c=o.createHmac("sha256",r).update(i).digest("hex");s["X-SMS-Signature"]=c,s["X-SMS-Timestamp"]=Date.now().toString()}try{let o=await fetch(e,{method:"POST",headers:s,body:i});if(!o.ok)console.error(`Webhook failed: ${o.status} ${o.statusText}`)}catch(o){console.error(`Webhook error: ${o.message}`)}}function ne(e){if(!e)return"";let t=e.replace(/[^\d+]/g,"");if(!t.startsWith("+")){if(t.length===10)t=`+1${t}`;else if(t.length===11&&t.startsWith("1"))t=`+${t}`}return t}function YA(e,t="national"){let r=ne(e);if(t==="e164")return r;if(r.startsWith("+1")&&r.length===12){let i=r.slice(2),s=i.slice(0,3),o=i.slice(3,6),c=i.slice(6);if(t==="national")return`(${s}) ${o}-${c}`;return`+1 (${s}) ${o}-${c}`}return r}function ZA(e){let t=ne(e);if(!t.startsWith("+"))return!1;let r=t.slice(1);if(r.length<10||r.length>15)return!1;return/^\d+$/.test(r)}function ey(e){let t=ne(e);if(!t.startsWith("+"))return null;let r={"1":"US/CA","7":"RU/KZ","20":"EG","27":"ZA","30":"GR","31":"NL","32":"BE","33":"FR","34":"ES","36":"HU","39":"IT","40":"RO","41":"CH","43":"AT","44":"GB","45":"DK","46":"SE","47":"NO","48":"PL","49":"DE","52":"MX","54":"AR","55":"BR","56":"CL","57":"CO","60":"MY","61":"AU","62":"ID","63":"PH","64":"NZ","65":"SG","66":"TH","81":"JP","82":"KR","84":"VN","86":"CN","90":"TR","91":"IN","92":"PK","93":"AF","94":"LK","98":"IR"},i=t.slice(1);for(let s of[1,2,3]){let o=i.slice(0,s);if(r[o])return r[o]}return null}function ty(e,t){return ne(e)===ne(t)}class er{config;connect;s3;transcribe;constructor(e={}){if(this.config={region:"us-east-1",voicemailPrefix:"voicemail/",recordingsPrefix:"recordings/",transcriptionLanguage:"en-US",...e},this.config.connectInstanceId)this.connect=new rn(this.config.region);if(this.config.voicemailBucket)this.s3=new a(this.config.region);if(this.config.enableTranscription)this.transcribe=new nn(this.config.region)}async call(e){if(!this.connect||!this.config.connectInstanceId)throw Error("Connect instance ID required for voice calls. Set connectInstanceId in config.");let t=e.from||this.config.defaultCallerId,r=e.contactFlowId||this.config.connectContactFlowId;if(!r)throw Error("Contact flow ID required for Connect calls");return{callId:(await this.connect.makeCall({instanceId:this.config.connectInstanceId,contactFlowId:r,to:e.to,from:t,attributes:e.attributes})).ContactId||""}}async sendVoiceMessage(e){return{messageId:(await this.call({to:e.to,from:e.from,attributes:{message:e.message,voiceId:e.voiceId||"Joanna",languageCode:e.languageCode||"en-US"}})).callId}}async speak(e,t,r){return this.sendVoiceMessage({to:e,message:t,voiceId:r})}async getVoicemails(e={}){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.prefix||this.config.voicemailPrefix||"voicemail/",r=await this.s3.list({bucket:this.config.voicemailBucket,prefix:t,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key)continue;if(s.Key.endsWith(".json"))continue;try{let o=await this.getVoicemailMetadata(s.Key);if(o)i.push({...o,size:s.Size})}catch(o){console.error(`Failed to read voicemail ${s.Key}:`,o)}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return this.getVoicemailMetadata(e)}async getVoicemailAudioUrl(e,t=3600){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:e,expiresIn:t})}async deleteVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");await this.s3.deleteObject(this.config.voicemailBucket,e);let t=e.replace(/\.[^/.]+$/,".json");try{await this.s3.deleteObject(this.config.voicemailBucket,t)}catch{}}async archiveVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=`voicemail/archive/${e.split("/").pop()||`${Date.now()}.wav`}`;return await this.s3.copyObject({sourceBucket:this.config.voicemailBucket,sourceKey:e,destinationBucket:this.config.voicemailBucket,destinationKey:r}),await this.s3.deleteObject(this.config.voicemailBucket,e),r}async getVoicemailCount(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");return(await this.s3.list({bucket:this.config.voicemailBucket,prefix:this.config.voicemailPrefix||"voicemail/",maxKeys:1000})||[]).filter((t)=>t.Key&&!t.Key.endsWith(".json")&&!t.Key.endsWith("/")).length}async getUnreadCount(){return(await this.getVoicemails({maxResults:1000})).filter((t)=>!t.read).length}async markAsRead(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.replace(/\.[^/.]+$/,".json");try{let r=await this.s3.getObject(this.config.voicemailBucket,t),i=JSON.parse(r);i.read=!0,i.readAt=new Date().toISOString(),await this.s3.putObject({bucket:this.config.voicemailBucket,key:t,body:JSON.stringify(i,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:t,body:JSON.stringify({read:!0,readAt:new Date().toISOString()},null,2),contentType:"application/json"})}}async markAsUnread(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.replace(/\.[^/.]+$/,".json");try{let r=await this.s3.getObject(this.config.voicemailBucket,t),i=JSON.parse(r);i.read=!1,delete i.readAt,await this.s3.putObject({bucket:this.config.voicemailBucket,key:t,body:JSON.stringify(i,null,2),contentType:"application/json"})}catch{}}async markManyAsRead(e){await Promise.all(e.map((t)=>this.markAsRead(t)))}async deleteMany(e){await Promise.all(e.map((t)=>this.deleteVoicemail(t)))}async transcribeVoicemail(e){if(!this.transcribe)throw Error("Transcription not enabled. Set enableTranscription: true in config");if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=`voicemail-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=`s3://${this.config.voicemailBucket}/${e}`,i=e.split(".").pop()?.toLowerCase(),s=i==="mp3"?"mp3":i==="wav"?"wav":"wav";await this.transcribe.startTranscriptionJob({TranscriptionJobName:t,LanguageCode:this.config.transcriptionLanguage||"en-US",Media:{MediaFileUri:r},MediaFormat:s,OutputBucketName:this.config.voicemailBucket,OutputKey:e.replace(/\.[^/.]+$/,"-transcript.json")});let o=e.replace(/\.[^/.]+$/,".json");try{let c=await this.s3.getObject(this.config.voicemailBucket,o),u=JSON.parse(c);u.transcriptionJobName=t,u.transcriptionStatus="processing",await this.s3.putObject({bucket:this.config.voicemailBucket,key:o,body:JSON.stringify(u,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:o,body:JSON.stringify({transcriptionJobName:t,transcriptionStatus:"processing"},null,2),contentType:"application/json"})}return{jobName:t}}async getTranscriptionStatus(e){if(!this.transcribe)throw Error("Transcription not enabled");let t=await this.transcribe.getTranscriptionJob({TranscriptionJobName:e}),r=t.TranscriptionJob?.TranscriptionJobStatus;if(r==="COMPLETED"&&t.TranscriptionJob?.Transcript?.TranscriptFileUri){let i=t.TranscriptionJob.Transcript.TranscriptFileUri;try{if(this.s3&&this.config.voicemailBucket&&i.includes(this.config.voicemailBucket)){let s=i.split(this.config.voicemailBucket+"/")[1];if(s){let o=await this.s3.getObject(this.config.voicemailBucket,s);return{status:"COMPLETED",transcription:JSON.parse(o).results?.transcripts?.[0]?.transcript||""}}}}catch{}}return{status:r}}async updateTranscription(e,t){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=e.replace(/\.[^/.]+$/,".json");try{let i=await this.s3.getObject(this.config.voicemailBucket,r),s=JSON.parse(i);s.transcription=t,s.transcriptionStatus="completed",await this.s3.putObject({bucket:this.config.voicemailBucket,key:r,body:JSON.stringify(s,null,2),contentType:"application/json"})}catch{await this.s3.putObject({bucket:this.config.voicemailBucket,key:r,body:JSON.stringify({transcription:t,transcriptionStatus:"completed"},null,2),contentType:"application/json"})}}async createGreeting(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r;if(e.audioData)r=`greetings/${t}.wav`,await this.s3.putObject({bucket:this.config.voicemailBucket,key:r,body:e.audioData,contentType:"audio/wav"});let i={id:t,name:e.name,type:e.type,text:e.text,audioKey:r,voiceId:e.voiceId||"Joanna",languageCode:e.languageCode||"en-US",isActive:e.setActive||!1,createdAt:new Date};if(e.setActive)await this.deactivateGreetingsOfType(e.type),i.isActive=!0;return await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${t}.json`,body:JSON.stringify(i,null,2),contentType:"application/json"}),i}async getGreetings(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let e=await this.s3.list({bucket:this.config.voicemailBucket,prefix:"greetings/",maxKeys:100}),t=[];for(let r of e||[]){if(!r.Key||!r.Key.endsWith(".json"))continue;try{let i=await this.s3.getObject(this.config.voicemailBucket,r.Key),s=JSON.parse(i);if(s.createdAt=new Date(s.createdAt),s.updatedAt)s.updatedAt=new Date(s.updatedAt);t.push(s)}catch{}}return t.sort((r,i)=>r.name.localeCompare(i.name))}async getGreeting(e){if(!this.s3||!this.config.voicemailBucket)return null;try{let t=await this.s3.getObject(this.config.voicemailBucket,`greetings/${e}.json`),r=JSON.parse(t);if(r.createdAt=new Date(r.createdAt),r.updatedAt)r.updatedAt=new Date(r.updatedAt);return r}catch{return null}}async getActiveGreeting(e){return(await this.getGreetings()).find((r)=>r.type===e&&r.isActive)||null}async setActiveGreeting(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=await this.getGreeting(e);if(!t)throw Error(`Greeting ${e} not found`);await this.deactivateGreetingsOfType(t.type),t.isActive=!0,t.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${e}.json`,body:JSON.stringify(t,null,2),contentType:"application/json"})}async deactivateGreetingsOfType(e){let t=await this.getGreetings();for(let r of t)if(r.type===e&&r.isActive)r.isActive=!1,r.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${r.id}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"})}async updateGreeting(e,t){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=await this.getGreeting(e);if(!r)throw Error(`Greeting ${e} not found`);if(t.name)r.name=t.name;if(t.text)r.text=t.text;if(t.audioData){let i=`greetings/${e}.wav`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:i,body:t.audioData,contentType:"audio/wav"}),r.audioKey=i}return r.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`greetings/${e}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"}),r}async deleteGreeting(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=await this.getGreeting(e);if(t?.audioKey)try{await this.s3.deleteObject(this.config.voicemailBucket,t.audioKey)}catch{}await this.s3.deleteObject(this.config.voicemailBucket,`greetings/${e}.json`)}async getGreetingAudioUrl(e,t=3600){let r=await this.getGreeting(e);if(!r?.audioKey||!this.s3||!this.config.voicemailBucket)return null;return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:r.audioKey,expiresIn:t})}async createForwardingRule(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r={id:t,name:e.name,enabled:e.enabled!==!1,condition:e.condition,forwardTo:e.forwardTo,ringTimeout:e.ringTimeout||20,businessHours:e.businessHours,priority:e.priority||100,createdAt:new Date};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:`forwarding/${t}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"}),r}async getForwardingRules(){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let e=await this.s3.list({bucket:this.config.voicemailBucket,prefix:"forwarding/",maxKeys:100}),t=[];for(let r of e||[]){if(!r.Key||!r.Key.endsWith(".json"))continue;try{let i=await this.s3.getObject(this.config.voicemailBucket,r.Key),s=JSON.parse(i);if(s.createdAt=new Date(s.createdAt),s.updatedAt)s.updatedAt=new Date(s.updatedAt);t.push(s)}catch{}}return t.sort((r,i)=>r.priority-i.priority)}async getForwardingRule(e){if(!this.s3||!this.config.voicemailBucket)return null;try{let t=await this.s3.getObject(this.config.voicemailBucket,`forwarding/${e}.json`),r=JSON.parse(t);if(r.createdAt=new Date(r.createdAt),r.updatedAt)r.updatedAt=new Date(r.updatedAt);return r}catch{return null}}async updateForwardingRule(e,t){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let r=await this.getForwardingRule(e);if(!r)throw Error(`Forwarding rule ${e} not found`);if(t.name!==void 0)r.name=t.name;if(t.enabled!==void 0)r.enabled=t.enabled;if(t.condition!==void 0)r.condition=t.condition;if(t.forwardTo!==void 0)r.forwardTo=t.forwardTo;if(t.ringTimeout!==void 0)r.ringTimeout=t.ringTimeout;if(t.businessHours!==void 0)r.businessHours=t.businessHours;if(t.priority!==void 0)r.priority=t.priority;return r.updatedAt=new Date,await this.s3.putObject({bucket:this.config.voicemailBucket,key:`forwarding/${e}.json`,body:JSON.stringify(r,null,2),contentType:"application/json"}),r}async setForwardingRuleEnabled(e,t){await this.updateForwardingRule(e,{enabled:t})}async deleteForwardingRule(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");await this.s3.deleteObject(this.config.voicemailBucket,`forwarding/${e}.json`)}async getApplicableForwardingRule(e={}){let t=await this.getForwardingRules(),r=new Date;for(let i of t){if(!i.enabled)continue;switch(i.condition){case"always":return i;case"busy":if(e.isBusy)return i;break;case"no_answer":if(e.noAnswer)return i;break;case"unreachable":if(e.isUnreachable)return i;break;case"after_hours":if(i.businessHours&&!this.isWithinBusinessHours(r,i.businessHours))return i;break}}return null}isWithinBusinessHours(e,t){let i=["sun","mon","tue","wed","thu","fri","sat"][e.getDay()],s=`${e.getHours().toString().padStart(2,"0")}:${e.getMinutes().toString().padStart(2,"0")}`;for(let o of t.schedule)if(o.day===i){if(s>=o.start&&s<=o.end)return!0}return!1}async getRecordings(e={}){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");let t=e.prefix||this.config.recordingsPrefix||"recordings/",r=await this.s3.list({bucket:this.config.voicemailBucket,prefix:t,maxKeys:e.maxResults||100}),i=[];for(let s of r||[]){if(!s.Key||s.Key.endsWith(".json")||s.Key.endsWith("/"))continue;try{let o=s.Key.replace(/\.[^/.]+$/,".json"),c={};try{let u=await this.s3.getObject(this.config.voicemailBucket,o);c=JSON.parse(u)}catch{}i.push({key:s.Key,contactId:c.contactId||s.Key.split("/").pop()?.split(".")[0]||"",from:c.from,to:c.to,duration:c.duration||0,timestamp:new Date(s.LastModified||Date.now()),contentType:"audio/wav",size:s.Size})}catch(o){console.error(`Failed to read recording ${s.Key}:`,o)}}return i.sort((s,o)=>o.timestamp.getTime()-s.timestamp.getTime())}async getRecordingUrl(e,t=3600){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");return this.s3.getSignedUrl({bucket:this.config.voicemailBucket,key:e,expiresIn:t})}async storeVoicemail(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Voicemail bucket not configured");let t=e.timestamp||new Date,r=`${Date.now()}-${Math.random().toString(36).slice(2)}`,i=e.contentType==="audio/mp3"?"mp3":"wav",s=`${this.config.voicemailPrefix}${t.toISOString().split("T")[0]}/${r}.${i}`,o=`${this.config.voicemailPrefix}${t.toISOString().split("T")[0]}/${r}.json`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:s,body:e.audioData,contentType:e.contentType||"audio/wav"});let c={from:e.from,to:e.to,duration:e.duration||0,transcription:e.transcription,timestamp:t.toISOString(),audioKey:s};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:o,body:JSON.stringify(c,null,2),contentType:"application/json"}),s}async storeRecording(e){if(!this.s3||!this.config.voicemailBucket)throw Error("Recordings bucket not configured");let t=e.timestamp||new Date,r=e.contentType==="audio/mp3"?"mp3":"wav",i=`${this.config.recordingsPrefix}${t.toISOString().split("T")[0]}/${e.contactId}.${r}`,s=`${this.config.recordingsPrefix}${t.toISOString().split("T")[0]}/${e.contactId}.json`;await this.s3.putObject({bucket:this.config.voicemailBucket,key:i,body:e.audioData,contentType:e.contentType||"audio/wav"});let o={contactId:e.contactId,from:e.from,to:e.to,duration:e.duration||0,timestamp:t.toISOString(),audioKey:i};return await this.s3.putObject({bucket:this.config.voicemailBucket,key:s,body:JSON.stringify(o,null,2),contentType:"application/json"}),i}async getVoicemailMetadata(e){if(!this.s3||!this.config.voicemailBucket)return null;let t=e.replace(/\.[^/.]+$/,".json");try{let r=await this.s3.getObject(this.config.voicemailBucket,t),i=JSON.parse(r);return{key:e,from:i.from||"unknown",to:i.to||"unknown",duration:i.duration||0,timestamp:new Date(i.timestamp||Date.now()),transcription:i.transcription,contentType:e.endsWith(".mp3")?"audio/mp3":"audio/wav",raw:i}}catch{return{key:e,from:"unknown",to:"unknown",duration:0,timestamp:new Date,contentType:e.endsWith(".mp3")?"audio/mp3":"audio/wav"}}}}function ry(e){let t=new er({region:e.region||"us-east-1",voicemailBucket:e.bucket,voicemailPrefix:e.prefix||"voicemail/"});return async(r)=>{if(console.log("Incoming voicemail event:",JSON.stringify(r)),r.Records){for(let i of r.Records)if(i.s3){let s=i.s3.bucket.name,o=decodeURIComponent(i.s3.object.key.replace(/\+/g," "));if(o.endsWith(".json"))continue;if(console.log(`Processing voicemail: ${s}/${o}`),e.onVoicemail){let c=await t.getVoicemail(o);if(c)await e.onVoicemail(c)}}}if(r.Details?.ContactData){let i=r.Details.ContactData;if(console.log(`Connect voicemail from: ${i.CustomerEndpoint?.Address}`),e.onVoicemail&&r.audioData){let s=await t.storeVoicemail({from:i.CustomerEndpoint?.Address||"unknown",to:i.SystemEndpoint?.Address||"unknown",audioData:r.audioData,duration:r.duration,transcription:r.transcription}),o=await t.getVoicemail(s);if(o)await e.onVoicemail(o)}}return{statusCode:200,body:JSON.stringify({message:"Voicemail processed"})}}}function ny(e){let t=new er({region:e.region||"us-east-1",voicemailBucket:e.bucket,recordingsPrefix:e.prefix||"recordings/"});return async(r)=>{if(console.log("Recording event:",JSON.stringify(r)),r.Records){for(let i of r.Records)if(i.s3){let s=i.s3.bucket.name,o=decodeURIComponent(i.s3.object.key.replace(/\+/g," "));if(o.endsWith(".json"))continue;if(console.log(`Processing recording: ${s}/${o}`),e.onRecording){let c=await t.getRecordings({prefix:o});if(c.length>0)await e.onRecording(c[0])}}}return{statusCode:200,body:JSON.stringify({message:"Recording processed"})}}}function iy(e){return new er(e)}class dn{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async createCase(e){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.CreateCase"},body:JSON.stringify({subject:e.subject,communicationBody:e.communicationBody,serviceCode:e.serviceCode,categoryCode:e.categoryCode,severityCode:e.severityCode||"normal",ccEmailAddresses:e.ccEmailAddresses,language:e.language||"en",issueType:e.issueType||"customer-service",attachmentSetId:e.attachmentSetId})})}async describeCase(e){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeCases"},body:JSON.stringify({caseIdList:[e],includeResolvedCases:!0,includeCommunications:!0})})).cases?.[0]||null}async listCases(e){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeCases"},body:JSON.stringify({includeResolvedCases:e?.includeResolved??!1,maxResults:e?.maxResults,nextToken:e?.nextToken,includeCommunications:!0})})}async addCommunication(e,t,r){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.AddCommunicationToCase"},body:JSON.stringify({caseId:e,communicationBody:t,ccEmailAddresses:r})})).result??!0}async resolveCase(e){return await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.ResolveCase"},body:JSON.stringify({caseId:e})})}async describeServices(e){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeServices"},body:JSON.stringify({serviceCodeList:e,language:"en"})})).services||[]}async describeSeverityLevels(){return(await this.client.request({service:"support",region:this.region,method:"POST",path:"/",headers:{"Content-Type":"application/x-amz-json-1.1","X-Amz-Target":"AWSSupport_20130415.DescribeSeverityLevels"},body:JSON.stringify({language:"en"})})).severityLevels||[]}}var wa={smsSandboxExit:(e)=>({subject:"Request to exit SMS sandbox for production use",serviceCode:"service-limit-increase",categoryCode:"service-limit-increase-sms-pinpoint",severityCode:"normal",communicationBody:`Hello,
|
|
31
31
|
|
|
32
32
|
I would like to request that our AWS account be moved out of the SMS sandbox to enable production SMS messaging.
|
|
33
33
|
|
|
@@ -111,4 +111,4 @@ I would like to request an increase to our Amazon Connect phone number limit.
|
|
|
111
111
|
**Use Case**:
|
|
112
112
|
${e.useCase}
|
|
113
113
|
|
|
114
|
-
Thank you for reviewing this request.`})};async function wa(e){let t=e.region||"us-east-1",r={success:!0,errors:[],warnings:[]},i=new Ke(t),s=new a(t),o=new dn(t),c=new n;console.log("Setting up SMS infrastructure..."),console.log(" Checking SMS account status...");try{let u=await K(i);if(r.sandboxStatus=u.inSandbox?"IN_SANDBOX":"OUT_OF_SANDBOX",u.inSandbox){if(console.log(" Account is in SMS sandbox"),e.sandbox?.autoRequestExit&&e.sandbox.companyName){console.log(" Requesting SMS sandbox exit via AWS Support...");try{let g=Ta.smsSandboxExit({companyName:e.sandbox.companyName,useCase:e.sandbox.useCase||"Transactional notifications and verification codes",expectedMonthlyVolume:e.sandbox.expectedMonthlyVolume||1000,websiteUrl:e.sandbox.websiteUrl}),m=await o.createCase(g);r.supportCaseId=m.caseId,r.sandboxStatus="EXIT_REQUESTED",console.log(` Support case created: ${m.caseId}`)}catch(g){r.warnings.push(`Failed to create sandbox exit support case: ${g.message}`),console.log(` Warning: Could not create support case: ${g.message}`)}}}if(r.spendingLimit=u.spendingLimit,console.log(` Current spending limit: $${u.spendingLimit}/month`),e.spending?.autoRequestIncrease&&e.spending.monthlyLimit&&u.spendingLimit<e.spending.monthlyLimit){console.log(` Requesting spending limit increase to $${e.spending.monthlyLimit}/month...`);try{await Pe(c,t,e.spending.monthlyLimit),r.spendingLimit=e.spending.monthlyLimit,console.log(" Spending limit updated successfully")}catch(g){if(e.sandbox?.companyName)try{let m=Ta.smsSpendLimitIncrease({companyName:e.sandbox.companyName,currentLimit:u.spendingLimit,requestedLimit:e.spending.monthlyLimit,useCase:e.sandbox.useCase||"Production SMS messaging"}),d=await o.createCase(m);r.supportCaseId=d.caseId,r.warnings.push(`Spending limit increase requested via support case: ${d.caseId}`),console.log(` Support case created for limit increase: ${d.caseId}`)}catch(m){r.warnings.push(`Failed to request spending limit increase: ${m.message}`)}else r.warnings.push("Spending limit increase requires AWS Support ticket. Provide companyName in config.")}}}catch(u){r.errors.push(`Failed to check SMS account status: ${u.message}`),console.log(` Error checking status: ${u.message}`)}if(e.inbox?.enabled&&e.inbox.bucket){console.log(" Setting up S3 inbox...");try{await Re(s,{bucket:e.inbox.bucket,prefix:e.inbox.prefix||"sms/inbox/",retentionDays:e.inbox.retentionDays}),r.inboxBucket=e.inbox.bucket,r.inboxPrefix=e.inbox.prefix||"sms/inbox/",console.log(` Inbox configured: s3://${e.inbox.bucket}/${r.inboxPrefix}`)}catch(u){r.errors.push(`Failed to set up S3 inbox: ${u.message}`),console.log(` Error setting up inbox: ${u.message}`)}}if(e.twoWay?.enabled){console.log(" Setting up two-way SMS...");try{let u=e.twoWay.topicName||`${e.accountName||"stacks"}-sms-inbox`,g=await z(i,c,t,u,e.accountId);r.twoWayTopicArn=g,console.log(` Two-way topic: ${g}`)}catch(u){r.errors.push(`Failed to set up two-way SMS topic: ${u.message}`),console.log(` Error setting up two-way: ${u.message}`)}}if(e.deliveryReceipts?.enabled){console.log(" Setting up delivery receipts...");try{let u=e.deliveryReceipts.topicName||`${e.accountName||"stacks"}-sms-delivery-receipts`,g=await Ne(i,c,t,u,e.accountId);r.deliveryReceiptTopicArn=g,console.log(` Delivery receipts topic: ${g}`)}catch(u){r.errors.push(`Failed to set up delivery receipts: ${u.message}`),console.log(` Error setting up delivery receipts: ${u.message}`)}}if(r.success=r.errors.length===0,console.log(r.success?" SMS setup completed successfully!":" SMS setup completed with errors"),r.success)r.warnings.push("For dedicated phone numbers, use AWS End User Messaging console. SNS uses shared pool by default.");return r}async function K(e){let t=!0,r=1,i=0;try{t=(await e.getSMSSandboxAccountStatus()).IsInSandbox}catch{t=!0}try{let s=await e.getSMSAttributes();if(s.MonthlySpendLimit)r=parseFloat(s.MonthlySpendLimit)}catch{}return{inSandbox:t,spendingLimit:r,usedThisMonth:i}}async function Pe(e,t,r){let i=new URLSearchParams({Action:"SetSMSAttributes",Version:"2010-03-31","attributes.entry.1.key":"MonthlySpendLimit","attributes.entry.1.value":r.toString()});await e.request({service:"sns",region:t,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()})}async function Re(e,t){try{if(!(await e.listBuckets()).Buckets?.some((o)=>o.Name===t.bucket))await e.createBucket(t.bucket);let s=[`${t.prefix}.keep`,"sms/sent/.keep","sms/conversations/.keep","sms/templates/.keep","sms/scheduled/.keep","sms/receipts/.keep"];for(let o of s)try{await e.putObject({bucket:t.bucket,key:o,body:`SMS folder created ${new Date().toISOString()}`,contentType:"text/plain"})}catch{}if(t.retentionDays)try{await e.putBucketLifecycleConfiguration(t.bucket,[{ID:"SmsInboxRetention",Status:"Enabled",Filter:{Prefix:t.prefix},Expiration:{Days:t.retentionDays}},{ID:"SmsReceiptsRetention",Status:"Enabled",Filter:{Prefix:"sms/receipts/"},Expiration:{Days:t.retentionDays}}])}catch(o){console.log(` Note: Could not set lifecycle rules: ${o.message}`)}}catch(r){throw Error(`Failed to set up S3 inbox: ${r.message}`)}}async function z(e,t,r,i,s){let c=(await e.listTopics()).Topics?.find((l)=>l.TopicArn?.endsWith(`:${i}`));if(c)return c.TopicArn;let u=new URLSearchParams({Action:"CreateTopic",Version:"2010-03-31",Name:i}),m=(await t.request({service:"sns",region:r,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:u.toString()}))?.CreateTopicResponse?.CreateTopicResult?.TopicArn;if(!m)throw Error("Failed to create SNS topic");let d=new URLSearchParams({Action:"SetTopicAttributes",Version:"2010-03-31",TopicArn:m,AttributeName:"Policy",AttributeValue:JSON.stringify({Version:"2012-10-17",Statement:[{Sid:"AllowSMSVoicePublish",Effect:"Allow",Principal:{Service:"sms-voice.amazonaws.com"},Action:"sns:Publish",Resource:m}]})});return await t.request({service:"sns",region:r,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:d.toString()}),m}async function Ne(e,t,r,i,s){return z(e,t,r,i,s)}async function jl(e){let t=e.region||"us-east-1",r=new Ke(t),i=await K(r),o=((await r.listTopics()).Topics||[]).filter((c)=>c.TopicArn?.includes("sms")).map((c)=>({name:c.TopicArn?.split(":").pop()||"",arn:c.TopicArn||""}));return{sandboxStatus:i.inSandbox?"IN_SANDBOX":"OUT_OF_SANDBOX",spendingLimit:i.spendingLimit,topics:o}}async function zl(e){if(!e.enabled)return{success:!0,errors:[],warnings:["SMS is disabled in config"]};let t={region:"us-east-1",accountName:"stacks",inbox:e.inbox?{enabled:e.inbox.enabled,bucket:e.inbox.bucket,prefix:e.inbox.prefix,retentionDays:e.inbox.retentionDays}:void 0,twoWay:e.twoWay?{enabled:e.twoWay.enabled}:void 0,spending:{monthlyLimit:e.maxSpendPerMonth,autoRequestIncrease:!0},sandbox:{autoRequestExit:!0,companyName:"Stacks",useCase:"Transactional notifications, verification codes, and account alerts for web applications built with Stacks framework.",expectedMonthlyVolume:5000,websiteUrl:"https://stacksjs.com"},deliveryReceipts:{enabled:!0}};return wa(t)}class Ra{client;region;constructor(e="us-east-1"){this.client=new n,this.region=e}async describePhoneNumbers(e={}){let t=await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.DescribePhoneNumbers"},body:JSON.stringify(e)});return{PhoneNumbers:t?.PhoneNumbers??[],NextToken:t?.NextToken}}async addSandboxPhone(e){let t=await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.CreateVerifiedDestinationNumber"},body:JSON.stringify({DestinationPhoneNumber:e})});return{verifiedDestinationNumberId:t?.VerifiedDestinationNumberId??"",phoneNumber:t?.DestinationPhoneNumber??e,status:t?.Status==="VERIFIED"?"VERIFIED":"PENDING"}}async verifySandboxPhone(e,t){let r=await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.VerifyDestinationNumber"},body:JSON.stringify({VerifiedDestinationNumberId:e,VerificationCode:t})});return{success:r?.Status==="VERIFIED",verifiedDestinationNumberId:r?.VerifiedDestinationNumberId,phoneNumber:r?.DestinationPhoneNumber,status:r?.Status==="VERIFIED"?"VERIFIED":"PENDING"}}async listSandboxPhones(){return((await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.DescribeVerifiedDestinationNumbers"},body:JSON.stringify({})}))?.VerifiedDestinationNumbers??[]).map((t)=>({id:t.VerifiedDestinationNumberId??"",phoneNumber:t.DestinationPhoneNumber??"",status:t.Status==="VERIFIED"?"VERIFIED":"PENDING",createdAt:t.CreatedTimestamp}))}}class tr{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async describeFileSystems(e){let t=[];if(e?.FileSystemId)t.push(`FileSystemId=${encodeURIComponent(e.FileSystemId)}`);if(e?.CreationToken)t.push(`CreationToken=${encodeURIComponent(e.CreationToken)}`);let r=`/2015-02-01/file-systems${t.length>0?`?${t.join("&")}`:""}`;return{FileSystems:((await this.client.request({service:"elasticfilesystem",region:this.region,method:"GET",path:r,headers:{"Content-Type":"application/json"}})).FileSystems||[]).map((s)=>({FileSystemId:s.FileSystemId,Name:s.Name,CreationTime:s.CreationTime,LifeCycleState:s.LifeCycleState,NumberOfMountTargets:s.NumberOfMountTargets,SizeInBytes:s.SizeInBytes?{Value:s.SizeInBytes.Value,Timestamp:s.SizeInBytes.Timestamp}:void 0,PerformanceMode:s.PerformanceMode,Encrypted:s.Encrypted,ThroughputMode:s.ThroughputMode,Tags:s.Tags}))}}}export{le,Jt,ji,zi,Hl,Aa,ya,Ki,Wi,Ia,ze,V,Ke,te,C,ue,rn,Sa,De,Ca,nn,sn,on,wm,Rm,PA,NA,kA,BA,At,xA,_A,OA,LA,yt,Dm,Pm,Nm,It,km,Bm,xm,an,$A,MA,FA,Xt,UA,QA,HA,ba,Ea,Gl,GA,qA,VA,Yt,_m,Om,Zt,We,cn,va,ql,jA,Vl,zA,St,KA,WA,JA,XA,re,YA,ZA,ey,ty,er,ry,ny,iy,dn,Ta,wa,jl,zl,Ra,tr};
|
|
114
|
+
Thank you for reviewing this request.`})};async function Ra(e){let t=e.region||"us-east-1",r={success:!0,errors:[],warnings:[]},i=new We(t),s=new a(t),o=new dn(t),c=new n;console.log("Setting up SMS infrastructure..."),console.log(" Checking SMS account status...");try{let u=await K(i);if(r.sandboxStatus=u.inSandbox?"IN_SANDBOX":"OUT_OF_SANDBOX",u.inSandbox){if(console.log(" Account is in SMS sandbox"),e.sandbox?.autoRequestExit&&e.sandbox.companyName){console.log(" Requesting SMS sandbox exit via AWS Support...");try{let g=wa.smsSandboxExit({companyName:e.sandbox.companyName,useCase:e.sandbox.useCase||"Transactional notifications and verification codes",expectedMonthlyVolume:e.sandbox.expectedMonthlyVolume||1000,websiteUrl:e.sandbox.websiteUrl}),m=await o.createCase(g);r.supportCaseId=m.caseId,r.sandboxStatus="EXIT_REQUESTED",console.log(` Support case created: ${m.caseId}`)}catch(g){r.warnings.push(`Failed to create sandbox exit support case: ${g.message}`),console.log(` Warning: Could not create support case: ${g.message}`)}}}if(r.spendingLimit=u.spendingLimit,console.log(` Current spending limit: $${u.spendingLimit}/month`),e.spending?.autoRequestIncrease&&e.spending.monthlyLimit&&u.spendingLimit<e.spending.monthlyLimit){console.log(` Requesting spending limit increase to $${e.spending.monthlyLimit}/month...`);try{await Pe(c,t,e.spending.monthlyLimit),r.spendingLimit=e.spending.monthlyLimit,console.log(" Spending limit updated successfully")}catch(g){if(e.sandbox?.companyName)try{let m=wa.smsSpendLimitIncrease({companyName:e.sandbox.companyName,currentLimit:u.spendingLimit,requestedLimit:e.spending.monthlyLimit,useCase:e.sandbox.useCase||"Production SMS messaging"}),d=await o.createCase(m);r.supportCaseId=d.caseId,r.warnings.push(`Spending limit increase requested via support case: ${d.caseId}`),console.log(` Support case created for limit increase: ${d.caseId}`)}catch(m){r.warnings.push(`Failed to request spending limit increase: ${m.message}`)}else r.warnings.push("Spending limit increase requires AWS Support ticket. Provide companyName in config.")}}}catch(u){r.errors.push(`Failed to check SMS account status: ${u.message}`),console.log(` Error checking status: ${u.message}`)}if(e.inbox?.enabled&&e.inbox.bucket){console.log(" Setting up S3 inbox...");try{await Re(s,{bucket:e.inbox.bucket,prefix:e.inbox.prefix||"sms/inbox/",retentionDays:e.inbox.retentionDays}),r.inboxBucket=e.inbox.bucket,r.inboxPrefix=e.inbox.prefix||"sms/inbox/",console.log(` Inbox configured: s3://${e.inbox.bucket}/${r.inboxPrefix}`)}catch(u){r.errors.push(`Failed to set up S3 inbox: ${u.message}`),console.log(` Error setting up inbox: ${u.message}`)}}if(e.twoWay?.enabled){console.log(" Setting up two-way SMS...");try{let u=e.twoWay.topicName||`${e.accountName||"stacks"}-sms-inbox`,g=await z(i,c,t,u,e.accountId);r.twoWayTopicArn=g,console.log(` Two-way topic: ${g}`)}catch(u){r.errors.push(`Failed to set up two-way SMS topic: ${u.message}`),console.log(` Error setting up two-way: ${u.message}`)}}if(e.deliveryReceipts?.enabled){console.log(" Setting up delivery receipts...");try{let u=e.deliveryReceipts.topicName||`${e.accountName||"stacks"}-sms-delivery-receipts`,g=await Ne(i,c,t,u,e.accountId);r.deliveryReceiptTopicArn=g,console.log(` Delivery receipts topic: ${g}`)}catch(u){r.errors.push(`Failed to set up delivery receipts: ${u.message}`),console.log(` Error setting up delivery receipts: ${u.message}`)}}if(r.success=r.errors.length===0,console.log(r.success?" SMS setup completed successfully!":" SMS setup completed with errors"),r.success)r.warnings.push("For dedicated phone numbers, use AWS End User Messaging console. SNS uses shared pool by default.");return r}async function K(e){let t=!0,r=1,i=0;try{t=(await e.getSMSSandboxAccountStatus()).IsInSandbox}catch{t=!0}try{let s=await e.getSMSAttributes();if(s.MonthlySpendLimit)r=parseFloat(s.MonthlySpendLimit)}catch{}return{inSandbox:t,spendingLimit:r,usedThisMonth:i}}async function Pe(e,t,r){let i=new URLSearchParams({Action:"SetSMSAttributes",Version:"2010-03-31","attributes.entry.1.key":"MonthlySpendLimit","attributes.entry.1.value":r.toString()});await e.request({service:"sns",region:t,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()})}async function Re(e,t){try{if(!(await e.listBuckets()).Buckets?.some((o)=>o.Name===t.bucket))await e.createBucket(t.bucket);let s=[`${t.prefix}.keep`,"sms/sent/.keep","sms/conversations/.keep","sms/templates/.keep","sms/scheduled/.keep","sms/receipts/.keep"];for(let o of s)try{await e.putObject({bucket:t.bucket,key:o,body:`SMS folder created ${new Date().toISOString()}`,contentType:"text/plain"})}catch{}if(t.retentionDays)try{await e.putBucketLifecycleConfiguration(t.bucket,[{ID:"SmsInboxRetention",Status:"Enabled",Filter:{Prefix:t.prefix},Expiration:{Days:t.retentionDays}},{ID:"SmsReceiptsRetention",Status:"Enabled",Filter:{Prefix:"sms/receipts/"},Expiration:{Days:t.retentionDays}}])}catch(o){console.log(` Note: Could not set lifecycle rules: ${o.message}`)}}catch(r){throw Error(`Failed to set up S3 inbox: ${r.message}`)}}async function z(e,t,r,i,s){let c=(await e.listTopics()).Topics?.find((l)=>l.TopicArn?.endsWith(`:${i}`));if(c)return c.TopicArn;let u=new URLSearchParams({Action:"CreateTopic",Version:"2010-03-31",Name:i}),m=(await t.request({service:"sns",region:r,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:u.toString()}))?.CreateTopicResponse?.CreateTopicResult?.TopicArn;if(!m)throw Error("Failed to create SNS topic");let d=new URLSearchParams({Action:"SetTopicAttributes",Version:"2010-03-31",TopicArn:m,AttributeName:"Policy",AttributeValue:JSON.stringify({Version:"2012-10-17",Statement:[{Sid:"AllowSMSVoicePublish",Effect:"Allow",Principal:{Service:"sms-voice.amazonaws.com"},Action:"sns:Publish",Resource:m}]})});return await t.request({service:"sns",region:r,method:"POST",path:"/",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:d.toString()}),m}async function Ne(e,t,r,i,s){return z(e,t,r,i,s)}async function jl(e){let t=e.region||"us-east-1",r=new We(t),i=await K(r),o=((await r.listTopics()).Topics||[]).filter((c)=>c.TopicArn?.includes("sms")).map((c)=>({name:c.TopicArn?.split(":").pop()||"",arn:c.TopicArn||""}));return{sandboxStatus:i.inSandbox?"IN_SANDBOX":"OUT_OF_SANDBOX",spendingLimit:i.spendingLimit,topics:o}}async function zl(e){if(!e.enabled)return{success:!0,errors:[],warnings:["SMS is disabled in config"]};let t={region:"us-east-1",accountName:"stacks",inbox:e.inbox?{enabled:e.inbox.enabled,bucket:e.inbox.bucket,prefix:e.inbox.prefix,retentionDays:e.inbox.retentionDays}:void 0,twoWay:e.twoWay?{enabled:e.twoWay.enabled}:void 0,spending:{monthlyLimit:e.maxSpendPerMonth,autoRequestIncrease:!0},sandbox:{autoRequestExit:!0,companyName:"Stacks",useCase:"Transactional notifications, verification codes, and account alerts for web applications built with Stacks framework.",expectedMonthlyVolume:5000,websiteUrl:"https://stacksjs.com"},deliveryReceipts:{enabled:!0}};return Ra(t)}class Da{client;region;constructor(e="us-east-1"){this.client=new n,this.region=e}async describePhoneNumbers(e={}){let t=await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.DescribePhoneNumbers"},body:JSON.stringify(e)});return{PhoneNumbers:t?.PhoneNumbers??[],NextToken:t?.NextToken}}async addSandboxPhone(e){let t=await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.CreateVerifiedDestinationNumber"},body:JSON.stringify({DestinationPhoneNumber:e})});return{verifiedDestinationNumberId:t?.VerifiedDestinationNumberId??"",phoneNumber:t?.DestinationPhoneNumber??e,status:t?.Status==="VERIFIED"?"VERIFIED":"PENDING"}}async verifySandboxPhone(e,t){let r=await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.VerifyDestinationNumber"},body:JSON.stringify({VerifiedDestinationNumberId:e,VerificationCode:t})});return{success:r?.Status==="VERIFIED",verifiedDestinationNumberId:r?.VerifiedDestinationNumberId,phoneNumber:r?.DestinationPhoneNumber,status:r?.Status==="VERIFIED"?"VERIFIED":"PENDING"}}async listSandboxPhones(){return((await this.client.request({service:"sms-voice",region:this.region,method:"POST",path:"/",headers:{"content-type":"application/x-amz-json-1.0","x-amz-target":"PinpointSMSVoiceV2.DescribeVerifiedDestinationNumbers"},body:JSON.stringify({})}))?.VerifiedDestinationNumbers??[]).map((t)=>({id:t.VerifiedDestinationNumberId??"",phoneNumber:t.DestinationPhoneNumber??"",status:t.Status==="VERIFIED"?"VERIFIED":"PENDING",createdAt:t.CreatedTimestamp}))}}class tr{client;region;constructor(e="us-east-1"){this.region=e,this.client=new n}async describeFileSystems(e){let t=[];if(e?.FileSystemId)t.push(`FileSystemId=${encodeURIComponent(e.FileSystemId)}`);if(e?.CreationToken)t.push(`CreationToken=${encodeURIComponent(e.CreationToken)}`);let r=`/2015-02-01/file-systems${t.length>0?`?${t.join("&")}`:""}`;return{FileSystems:((await this.client.request({service:"elasticfilesystem",region:this.region,method:"GET",path:r,headers:{"Content-Type":"application/json"}})).FileSystems||[]).map((s)=>({FileSystemId:s.FileSystemId,Name:s.Name,CreationTime:s.CreationTime,LifeCycleState:s.LifeCycleState,NumberOfMountTargets:s.NumberOfMountTargets,SizeInBytes:s.SizeInBytes?{Value:s.SizeInBytes.Value,Timestamp:s.SizeInBytes.Timestamp}:void 0,PerformanceMode:s.PerformanceMode,Encrypted:s.Encrypted,ThroughputMode:s.ThroughputMode,Tags:s.Tags}))}}}export{ue,Jt,zi,Ki,Hl,ya,Ia,Wi,Ji,Sa,Ke,V,We,re,C,pe,rn,Ca,De,ba,nn,sn,on,wm,Rm,PA,NA,kA,BA,yt,xA,_A,OA,LA,It,Dm,Pm,Nm,St,km,Bm,xm,an,$A,MA,FA,Xt,UA,QA,HA,Ea,va,Gl,GA,qA,VA,Yt,_m,Om,Zt,Je,cn,Ta,ql,jA,Vl,zA,Ct,KA,WA,JA,XA,ne,YA,ZA,ey,ty,er,ry,ny,iy,dn,wa,Ra,jl,zl,Da,tr};
|