@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,6 +1,6 @@
|
|
|
1
|
-
var l={mode:"detection",paranoiaLevel:1,inboundThreshold:5,outboundThreshold:4,maxBodyBytes:13107200,rejectOversizedBody:!0,auditLogPath:"/var/log/ts-cloud/waf-audit.log",blockStatus:403},d={bypassBase:1e5,exclusionBase:101000,rateLimitBase:102000,customBase:109000};function
|
|
1
|
+
var l={mode:"detection",paranoiaLevel:1,inboundThreshold:5,outboundThreshold:4,maxBodyBytes:13107200,rejectOversizedBody:!0,auditLogPath:"/var/log/ts-cloud/waf-audit.log",blockStatus:403},d={bypassBase:1e5,exclusionBase:101000,rateLimitBase:102000,customBase:109000};function Ge(e){return e.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/[\r\n]+/g," ")}function us(e){if(e.length>1000)return!1;if(/\([^)]*[+*]\)[+*]/.test(e))return!1;if(/\[[^\]]*\][+*]\{/.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}function b(e,r){let t=[],o=[],s=r;for(let n of e){if(n.enabled===!1)continue;if(n.key&&(n.key.source==="cookie"||n.key.source==="header")&&!n.key.name){o.push({ruleId:n.id,reason:"The rule keys on a header or cookie but names none."});continue}let c=n.path?Oa(n.path):".*";if(!us(c)){o.push({ruleId:n.id,reason:"The path pattern compiles to an unsafe regular expression."});continue}let u=[`SecRule REQUEST_URI "@rx ${Ge(c)}"`];if(n.methods?.length)u.push(` "chain,id:${s},phase:1,pass,nolog,setvar:'tx.ts_cloud_ratelimit=${Ge(n.id)}'"`);else u.push(` "id:${s},phase:1,pass,nolog,setvar:'tx.ts_cloud_ratelimit=${Ge(n.id)}'"`);if(t.push(`# Marks requests governed by the ts-cloud rate limit "${Ge(n.id)}".`),t.push(u.join(" \\\n")),n.methods?.length)t.push(` SecRule REQUEST_METHOD "@within ${Ge(n.methods.join(" ").toUpperCase())}" "t:none"`);t.push(""),s++}return{lines:t,unmapped:o}}function Oa(e){return`^${e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"\x01").replace(/\*/g,"[^/]*").replace(/\u0001/g,".*")}$`}function ri(e={},r=[]){let t=e.mode??l.mode,o=[],s=e.paranoiaLevel??l.paranoiaLevel,n=e.inboundThreshold??l.inboundThreshold,c=e.outboundThreshold??l.outboundThreshold,u=e.maxBodyBytes??l.maxBodyBytes,h=e.rejectOversizedBody!==!1;if(t==="blocking"&&s>=3)o.push(`Paranoia level ${s} blocks legitimate traffic on most applications until it is tuned. Run it in detection mode first.`);if(t==="blocking")o.push("zig-waf is pre-alpha. Blocking mode makes it a failure path for every request.");if(!h)o.push("Oversized bodies are passed through uninspected, so padding a request bypasses every rule.");if(e.bypassPaths?.length)o.push(`${e.bypassPaths.length} path(s) bypass inspection entirely.`);let i=["# Managed by ts-cloud. Edits are overwritten on the next deploy.",`# Mode: ${t}. Paranoia level: ${s}.`,""];if(t==="off")return i.push("SecRuleEngine Off",""),{config:`${i.join(`
|
|
2
2
|
`)}
|
|
3
|
-
`,unmappedRateLimits:[],warnings:o,mode:t};i.push(`SecRuleEngine ${t==="blocking"?"On":"DetectionOnly"}`,"SecRequestBodyAccess On","SecResponseBodyAccess Off",`SecRequestBodyLimit ${u}`,`SecRequestBodyNoFilesLimit ${Math.min(u,131072)}`,`SecRequestBodyLimitAction ${h?"Reject":"ProcessPartial"}`,"SecRequestBodyInMemoryLimit 131072",`SecAuditEngine ${t==="blocking"?"RelevantOnly":"On"}`,"SecAuditLogParts ABIJDEFHZ",`SecAuditLog ${
|
|
3
|
+
`,unmappedRateLimits:[],warnings:o,mode:t};i.push(`SecRuleEngine ${t==="blocking"?"On":"DetectionOnly"}`,"SecRequestBodyAccess On","SecResponseBodyAccess Off",`SecRequestBodyLimit ${u}`,`SecRequestBodyNoFilesLimit ${Math.min(u,131072)}`,`SecRequestBodyLimitAction ${h?"Reject":"ProcessPartial"}`,"SecRequestBodyInMemoryLimit 131072",`SecAuditEngine ${t==="blocking"?"RelevantOnly":"On"}`,"SecAuditLogParts ABIJDEFHZ",`SecAuditLog ${Ge(e.auditLogPath??l.auditLogPath)}`,"SecAuditLogType Serial",`SecDefaultAction "phase:1,log,auditlog,${t==="blocking"?`deny,status:${e.blockStatus??l.blockStatus}`:"pass"}"`,"","# CRS anomaly scoring setup.",`SecAction "id:900000,phase:1,pass,nolog,t:none,setvar:tx.paranoia_level=${s}"`,`SecAction "id:900001,phase:1,pass,nolog,t:none,setvar:tx.inbound_anomaly_score_threshold=${n}"`,`SecAction "id:900002,phase:1,pass,nolog,t:none,setvar:tx.outbound_anomaly_score_threshold=${c}"`,'SecAction "id:900003,phase:1,pass,nolog,t:none,setvar:tx.critical_anomaly_score=5,setvar:tx.error_anomaly_score=4,setvar:tx.warning_anomaly_score=3,setvar:tx.notice_anomaly_score=2"','SecAction "id:900004,phase:1,pass,nolog,t:none,setvar:tx.anomaly_score=0"',"");let g=d.bypassBase;for(let a of e.bypassPaths??[]){let y=Oa(a);if(!us(y)){o.push(`Bypass path "${a}" was dropped: it compiles to an unsafe regular expression.`);continue}i.push(`# Inspection bypass for ${Ge(a)}. Every bypass is an unguarded route.`,`SecRule REQUEST_URI "@rx ${Ge(y)}" "id:${g},phase:1,pass,nolog,ctl:ruleEngine=Off"`,""),g++}let m=d.exclusionBase;for(let a of e.exclusions??[]){if(!Number.isInteger(a.ruleId)||a.ruleId<=0){o.push(`Exclusion with rule id "${a.ruleId}" was dropped: the id is not a positive integer.`);continue}if(i.push(`# ${Ge(a.reason)}`),a.pathPattern){if(!us(a.pathPattern)){o.push(`Exclusion for rule ${a.ruleId} was dropped: its path pattern is unsafe.`);continue}i.push(`SecRule REQUEST_URI "@rx ${Ge(a.pathPattern)}" "id:${m},phase:1,pass,nolog,ctl:ruleRemoveById=${a.ruleId}"`),m++}else i.push(`SecRuleRemoveById ${a.ruleId}`);i.push("")}let p=b(r,d.rateLimitBase);if(p.lines.length>0)i.push("# Rate-limit route markers. SecLang has no counters, so the tag is set","# here and the counting stays in the ts-cloud limiter.",...p.lines);let f=d.customBase;for(let a of e.customRules??[])i.push(`# Operator-supplied rule ${f}.`,a.trim(),""),f++;if(t==="blocking")i.push("# Blocking decision: one rule, at the end, on the accumulated score.",`SecRule TX:ANOMALY_SCORE "@ge %{tx.inbound_anomaly_score_threshold}" "id:949110,phase:2,deny,status:${e.blockStatus??l.blockStatus},log,msg:'Inbound anomaly score exceeded (total: %{tx.anomaly_score})'"`,"");return{config:`${i.join(`
|
|
4
4
|
`)}
|
|
5
5
|
`,unmappedRateLimits:p.unmapped,warnings:o,mode:t}}function ps(e={},r=[],t={}){let o=t.binary??"/usr/local/bin/zig-waf",s=t.configPath??"/etc/ts-cloud/waf.conf",n=ri(e,r);return`#!/usr/bin/env bash
|
|
6
6
|
# Managed by ts-cloud. Installs the zig-waf ruleset.
|
|
@@ -34,4 +34,4 @@ fi
|
|
|
34
34
|
mv "${s}.new" "${s}"
|
|
35
35
|
echo "ts-cloud: WAF config installed (mode: ${n.mode})"
|
|
36
36
|
`}function _u(e,r){return e.map((t)=>({projectId:r.projectId,environmentId:r.environmentId,resourceId:r.resourceId,kind:"event",source:"zig-waf",name:t.action==="blocked"?"waf.blocked":"waf.matched",timestamp:t.timestamp,value:1,host:t.host,pathTemplate:t.path,method:t.method,attributes:{ruleId:t.ruleId??null,anomalyScore:t.anomalyScore,action:t.action,messages:t.messages.slice(0,5)}}))}
|
|
37
|
-
export{
|
|
37
|
+
export{Ge,us,Oa,ri,ps,_u};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var M=[{index:0,id:"clients",label:"Clients"},{index:1,id:"dns",label:"DNS & TLS"},{index:2,id:"edge",label:"Edge"},{index:3,id:"routing",label:"Routing"},{index:4,id:"apps",label:"Applications"},{index:5,id:"runtime",label:"Background runtime"},{index:6,id:"data",label:"Data services"},{index:7,id:"durability",label:"Durability"}],N=[{index:0,id:"clients",label:"Clients"},{index:1,id:"dns",label:"DNS & TLS"},{index:2,id:"edge",label:"Edge"},{index:3,id:"entry",label:"Entry points"},{index:4,id:"compute",label:"Compute"},{index:5,id:"messaging",label:"Messaging & pooling"},{index:6,id:"data",label:"Data services"},{index:7,id:"durability",label:"Durability"}],P=[{match:/^redis/,kind:"cache",label:"Redis"},{match:/^(?:mysql|mariadb)/,kind:"database",label:"MySQL"},{match:/^postgres/,kind:"database",label:"PostgreSQL"},{match:/^meilisearch/,kind:"database",label:"Meilisearch"},{match:/^vitess|^vtgate/,kind:"database",label:"Vitess"},{match:/^memcached/,kind:"cache",label:"Memcached"}],j=/^(?:rpx-gateway|nginx|caddy|traefik|haproxy)$/;function e(n,u=""){let a=n==null?"":String(n).trim();return a&&a!=="-"&&a!=="—"?a:u}function F(n){return Array.isArray(n)?n.length:0}function h(n){let u=e(n).toLowerCase();if(!u)return"unknown";if(["running","live","active","available","success","ok","healthy","enabled"].includes(u))return"ok";if(["failed","stopped","unreachable","error","critical","disabled"].includes(u))return"bad";if(["configured","creating","pending","degraded","shadowed","warn","unknown"].includes(u))return"warn";return"warn"}function r(n,u,a){if(a.has(u.source)&&a.has(u.target))n.push(u)}function Xr(n,u={}){let a=[],o=[],q=[],f=n.server??{},c=Array.isArray(n.sites)?n.sites:[],L=Array.isArray(n.services)?n.services:[],k=Array.isArray(n.workers)?n.workers:[],m=n.security??{},C=!!n._serverReachable&&!n.metricsUnavailable,T="box";if(!C)q.push("The compute box could not be probed, so live service state is missing; the shape comes from your cloud config.");a.push({id:"internet",label:"Internet",kind:"internet",layer:0,status:"ok",sub:"Public traffic",facts:[],external:!0});let i=[...new Set(c.map((t)=>e(t.domain)||e(t.route).split("/")[0]).filter((t)=>t&&t!=="internal"&&t!=="loopback"))],E=Array.isArray(m.tlsCertificates)?m.tlsCertificates:[],g=E.filter((t)=>Number(t?.daysRemaining??999)<21).length;a.push({id:"dns",label:i.length===1?i[0]:"Public domains",kind:"dns",layer:1,status:g?"warn":i.length?"ok":"unknown",sub:i.length>1?`${i.length} domains`:"DNS & certificates",facts:[{label:"Domains",value:i.length?i.slice(0,6).join(", "):"none resolved"},{label:"Certificates",value:E.length?`${E.length} issued`:"none reported"},...g?[{label:"Expiring",value:`${g} within 21 days`}]:[]],href:"/server/security",external:!0});let v=m.firewall??{},w=Array.isArray(m.ports)?m.ports:[];a.push({id:"firewall",label:"Host firewall",kind:"firewall",layer:2,status:h(v.status),sub:e(v.summary,"Inbound filtering"),facts:[{label:"State",value:e(v.status,"unknown")},{label:"Open ports",value:w.length?w.map((t)=>e(t.listen)).join(", "):"not reported"}],href:"/server/firewall",group:"box"});let y=L.find((t)=>j.test(e(t.name)));a.push({id:"proxy",label:e(y?.name,"Reverse proxy"),kind:"proxy",layer:3,status:y?h(y.status):"unknown",sub:"TLS termination & routing",facts:[{label:"Service",value:e(y?.name,"not detected")},{label:"State",value:e(y?.status,C?"not running":"not probed")},{label:"Routes",value:`${c.length} site${c.length===1?"":"s"}`}],href:"/server/services",group:"box"});for(let t of c){let d=`site:${e(t.name)}`;if(!e(t.name))continue;a.push({id:d,label:e(t.name),kind:"site",layer:4,status:h(t.status),sub:e(t.runtime,"runtime"),facts:[{label:"Route",value:e(t.route,"internal")},{label:"Runtime",value:e(t.runtime,"unknown")},{label:"Delivery",value:e(t.deploy,"unknown")},{label:"TLS",value:e(t.tls,"unknown")},...t.responseMs!=null?[{label:"Response",value:`${Math.round(Number(t.responseMs))} ms`}]:[],...t.httpStatus!=null?[{label:"HTTP",value:String(t.httpStatus)}]:[]],href:"/server/sites",group:"box"})}for(let t of k){let d=`worker:${e(t.name)}`;if(!e(t.name))continue;a.push({id:d,label:e(t.name),kind:"worker",layer:5,status:h(t.status),sub:`${Number(t.processes??1)} process${Number(t.processes??1)===1?"":"es"}`,facts:[{label:"Processes",value:String(t.processes??1)},{label:"State",value:e(t.status,"unknown")},...e(t.site)?[{label:"Site",value:e(t.site)}]:[]],href:"/operations/jobs",group:"box"})}let A=n.serverScheduler??{};if(A.enabled)a.push({id:"scheduler",label:"Scheduler",kind:"scheduler",layer:5,status:"ok",sub:"Cron dispatch",facts:[{label:"Last run",value:e(A.lastRun,"unknown")}],href:"/operations/jobs",group:"box"});let l=L.map((t)=>{let d=e(t.name),s=P.find((p)=>p.match.test(d));return s?{service:t,name:d,...s}:null}).filter((t)=>!!t);for(let t of l)a.push({id:`data:${t.name}`,label:t.label,kind:t.kind,layer:6,status:h(t.service.status),sub:t.name,facts:[{label:"Unit",value:t.name},{label:"State",value:e(t.service.status,"unknown")}],href:"/data/services",group:"box"});let x=n.backup??{};if(x.enabled)a.push({id:"backup",label:"Backups",kind:"backup",layer:7,status:"ok",sub:e(x.destination,"destination"),facts:[{label:"Destination",value:e(x.destination,"unknown")},{label:"Schedule",value:e(x.schedule,"unknown")},{label:"Retention",value:`${x.retention??0} copies`},{label:"Last run",value:e(x.last,"unknown")}],href:"/data/backups"});let b=new Set(a.map((t)=>t.id));r(o,{source:"internet",target:"dns",flow:"request",label:"https"},b),r(o,{source:"dns",target:"firewall",flow:"request",label:"443/80"},b),r(o,{source:"firewall",target:"proxy",flow:"request"},b);for(let t of c){let d=`site:${e(t.name)}`;r(o,{source:"proxy",target:d,flow:"request",label:e(t.path)||void 0,status:h(t.status)},b)}for(let t of k){let d=`worker:${e(t.name)}`,s=`site:${e(t.site)}`;if(b.has(s))r(o,{source:s,target:d,flow:"async",label:"queue"},b);else r(o,{source:"proxy",target:d,flow:"async",label:"queue"},b)}for(let t of k)r(o,{source:"scheduler",target:`worker:${e(t.name)}`,flow:"async",label:"dispatch"},b);let D=[...c.map((t)=>`site:${e(t.name)}`),...k.map((t)=>`worker:${e(t.name)}`)];for(let t of l)for(let d of D)r(o,{source:d,target:`data:${t.name}`,flow:"data",label:"localhost"},b);if(l.length&&D.length)q.push("Data-service edges show co-location on the box: every process on it can reach localhost. They are not a declared per-site binding.");for(let t of l)r(o,{source:`data:${t.name}`,target:"backup",flow:"backup",label:"snapshot"},b);for(let t of c)r(o,{source:`site:${e(t.name)}`,target:"backup",flow:"backup"},b);return{mode:"server",project:e(u.project)||e(n.project?.name)||e(f.name,"project"),environment:e(u.environment)||e(n.environment,"production"),provider:e(f.provider,"unknown"),region:e(f.region,"unknown"),generatedAt:new Date().toISOString(),layers:M,groups:[{id:"box",label:e(f.name,"App server"),sub:[e(f.provider),e(f.region),e(f.ip)].filter(Boolean).join(" · ")}],nodes:a,links:o,notes:q}}function Va(n,u={}){let a=[],o=[],q=[],f=n.app??{},c=Array.isArray(n.functions)?n.functions:[],L=Array.isArray(n.queues)?n.queues:[],k=n.metrics??{};if(!c.length)q.push("No Lambda functions were read for this environment, so the compute layer is empty rather than assumed.");a.push({id:"internet",label:"Internet",kind:"internet",layer:0,status:"ok",sub:"Public traffic",facts:[],external:!0});let m=e(f.url),C=m.replace(/^https?:\/\//,"").split("/")[0];a.push({id:"dns",label:C||"Application domain",kind:"dns",layer:1,status:C?"ok":"unknown",sub:"DNS & certificates",facts:[{label:"Endpoint",value:m||"not resolved"}],external:!0});let T=n.waf;if(T)a.push({id:"waf",label:"WAF",kind:"waf",layer:2,status:h(T.status??"active"),sub:e(T.scope,"Managed rules"),facts:[{label:"Web ACL",value:e(T.name,"unnamed")},...T.blocked!=null?[{label:"Blocked (24h)",value:String(T.blocked)}]:[],{label:"Rules",value:String(F(n.wafRules))}],href:"/serverless/firewall"});let i=n.assetsInfo;if(i)a.push({id:"cdn",label:"Asset CDN",kind:"cdn",layer:2,status:"ok",sub:e(i.cdn,"CloudFront"),facts:[{label:"Distribution",value:e(i.cdn,"unknown")},{label:"Custom domain",value:e(i.customDomain,"none")}],href:"/serverless/assets"}),a.push({id:"assets",label:"Asset bucket",kind:"storage",layer:6,status:"ok",sub:e(i.bucket,"S3"),facts:[{label:"Bucket",value:e(i.bucket,"unknown")},...i.files?[{label:"Objects",value:String(i.files)}]:[],...i.sizeMb?[{label:"Size",value:`${i.sizeMb} MB`}]:[]],href:"/serverless/assets"});let E=c.find((s)=>e(s.key).startsWith("http"));a.push({id:"gateway",label:"HTTP entry point",kind:"gateway",layer:3,status:E?"ok":"unknown",sub:"Function URL / API Gateway",facts:[{label:"Endpoint",value:m||"not resolved"},{label:"Invocations (24h)",value:String(k.invocations??0)},...k.errorRatePct!=null?[{label:"Error rate",value:`${k.errorRatePct}%`}]:[]],href:"/serverless/metrics"});for(let s of c){let p=`fn:${e(s.name)}`;if(!e(s.name))continue;let S=Number(s.errors??0),R=Number(s.invocations??0);a.push({id:p,label:e(s.key,e(s.name)),kind:"function",layer:4,status:S>0?R&&S/R>0.02?"bad":"warn":R?"ok":"idle",sub:e(s.runtime,"lambda"),facts:[{label:"Function",value:e(s.name)},{label:"Memory",value:`${s.memory??0} MB`},{label:"Timeout",value:`${s.timeout??0}s`},{label:"Invocations (24h)",value:String(R)},{label:"Errors (24h)",value:String(S)},{label:"p95",value:`${s.p95??0} ms`},...s.provisioned?[{label:"Provisioned",value:e(s.provisioned)}]:[]],href:"/serverless/functions"})}for(let s of L){let p=`queue:${e(s.name)}`;if(!e(s.name))continue;let S=Number(s.dlq??0);a.push({id:p,label:e(s.name),kind:"queue",layer:5,status:S>0?"bad":Number(s.visible??0)>0?"warn":"ok",sub:"SQS",facts:[{label:"Visible",value:String(s.visible??0)},{label:"In flight",value:String(s.inFlight??0)},{label:"Processed (24h)",value:String(s.processed??0)},{label:"Dead letter",value:String(S)}],href:"/serverless/queues"})}let g=n.aurora;if(g)a.push({id:"database",label:"Aurora Serverless",kind:"database",layer:6,status:h(g.status),sub:e(g.engine,"aurora"),facts:[{label:"Cluster",value:e(g.id,"unknown")},{label:"Capacity",value:`${g.currentAcu??0} ACU (${g.minAcu??0}–${g.maxAcu??0})`},{label:"Connections",value:String(g.connections??0)}],href:"/serverless/data"});let v=n.proxy;if(v)a.push({id:"rds-proxy",label:"RDS Proxy",kind:"database",layer:5,status:h(v.status),sub:"Connection pooling",facts:[{label:"Proxy",value:e(v.name,"unknown")},{label:"Endpoint",value:e(v.endpoint,"unknown")},{label:"Pooled",value:String(v.pooledConns??0)}],href:"/serverless/data"});let w=n.redis;if(w)a.push({id:"cache",label:"ElastiCache",kind:"cache",layer:6,status:h(w.status),sub:e(w.node,"redis"),facts:[{label:"Group",value:e(w.id,"unknown")},{label:"Hit rate",value:`${w.hitRate??0}%`}],href:"/serverless/data"});let y=n.efs;if(y)a.push({id:"efs",label:"EFS",kind:"filesystem",layer:6,status:h(y.status),sub:e(y.mount,"/mnt/local"),facts:[{label:"File system",value:e(y.id,"unknown")},{label:"Mount",value:e(y.mount,"unknown")},{label:"Size",value:`${y.sizeMb??0} MB`}],href:"/data/volumes"});let A=n.scheduler??{};if(A.enabled)a.push({id:"scheduler",label:"Scheduler",kind:"scheduler",layer:3,status:"ok",sub:e(A.expression,"rate(1 minute)"),facts:[{label:"Expression",value:e(A.expression,"unknown")},{label:"Last run",value:e(A.lastRun,"unknown")}],href:"/operations/jobs"});let l=new Set(a.map((s)=>s.id)),x=l.has("waf")?"waf":"gateway";r(o,{source:"internet",target:"dns",flow:"request",label:"https"},l),r(o,{source:"dns",target:x,flow:"request"},l),r(o,{source:"dns",target:"cdn",flow:"request",label:"assets"},l),r(o,{source:"waf",target:"gateway",flow:"request",label:"allowed"},l),r(o,{source:"cdn",target:"assets",flow:"data",label:"origin"},l);let b=c.filter((s)=>e(s.key).startsWith("http")),D=c.filter((s)=>e(s.key).startsWith("queue")),t=c.filter((s)=>e(s.key).startsWith("cli"));for(let s of b)r(o,{source:"gateway",target:`fn:${e(s.name)}`,flow:"request",label:"invoke"},l);for(let s of t)r(o,{source:"scheduler",target:`fn:${e(s.name)}`,flow:"async",label:"schedule"},l);for(let s of L){for(let p of b)r(o,{source:`fn:${e(p.name)}`,target:`queue:${e(s.name)}`,flow:"async",label:"publish"},l);for(let p of D)r(o,{source:`queue:${e(s.name)}`,target:`fn:${e(p.name)}`,flow:"async",label:"consume"},l)}let d=["rds-proxy","database","cache","efs","assets"];for(let s of c){let p=`fn:${e(s.name)}`;if(l.has("rds-proxy"))r(o,{source:p,target:"rds-proxy",flow:"data",label:"pooled"},l);else r(o,{source:p,target:"database",flow:"data",label:"sql"},l);for(let S of d.filter((R)=>R!=="rds-proxy"&&R!=="database"))r(o,{source:p,target:S,flow:"data"},l)}return r(o,{source:"rds-proxy",target:"database",flow:"data",label:"sql"},l),{mode:"serverless",project:e(u.project)||e(f.name,"application"),environment:e(u.environment)||e(f.env,"production"),provider:"aws",region:e(f.region,"unknown"),generatedAt:new Date().toISOString(),layers:N,groups:[],nodes:a,links:o,notes:q}}
|
|
2
|
-
export{
|
|
1
|
+
var M=[{index:0,id:"clients",label:"Clients"},{index:1,id:"dns",label:"DNS & TLS"},{index:2,id:"edge",label:"Edge"},{index:3,id:"routing",label:"Routing"},{index:4,id:"apps",label:"Applications"},{index:5,id:"runtime",label:"Background runtime"},{index:6,id:"data",label:"Data services"},{index:7,id:"durability",label:"Durability"}],N=[{index:0,id:"clients",label:"Clients"},{index:1,id:"dns",label:"DNS & TLS"},{index:2,id:"edge",label:"Edge"},{index:3,id:"entry",label:"Entry points"},{index:4,id:"compute",label:"Compute"},{index:5,id:"messaging",label:"Messaging & pooling"},{index:6,id:"data",label:"Data services"},{index:7,id:"durability",label:"Durability"}],P=[{match:/^redis/,kind:"cache",label:"Redis"},{match:/^(?:mysql|mariadb)/,kind:"database",label:"MySQL"},{match:/^postgres/,kind:"database",label:"PostgreSQL"},{match:/^meilisearch/,kind:"database",label:"Meilisearch"},{match:/^vitess|^vtgate/,kind:"database",label:"Vitess"},{match:/^memcached/,kind:"cache",label:"Memcached"}],j=/^(?:rpx-gateway|nginx|caddy|traefik|haproxy)$/;function e(n,u=""){let a=n==null?"":String(n).trim();return a&&a!=="-"&&a!=="—"?a:u}function F(n){return Array.isArray(n)?n.length:0}function h(n){let u=e(n).toLowerCase();if(!u)return"unknown";if(["running","live","active","available","success","ok","healthy","enabled"].includes(u))return"ok";if(["failed","stopped","unreachable","error","critical","disabled"].includes(u))return"bad";if(["configured","creating","pending","degraded","shadowed","warn","unknown"].includes(u))return"warn";return"warn"}function r(n,u,a){if(a.has(u.source)&&a.has(u.target))n.push(u)}function Qr(n,u={}){let a=[],o=[],q=[],f=n.server??{},c=Array.isArray(n.sites)?n.sites:[],L=Array.isArray(n.services)?n.services:[],k=Array.isArray(n.workers)?n.workers:[],m=n.security??{},C=!!n._serverReachable&&!n.metricsUnavailable,T="box";if(!C)q.push("The compute box could not be probed, so live service state is missing; the shape comes from your cloud config.");a.push({id:"internet",label:"Internet",kind:"internet",layer:0,status:"ok",sub:"Public traffic",facts:[],external:!0});let i=[...new Set(c.map((t)=>e(t.domain)||e(t.route).split("/")[0]).filter((t)=>t&&t!=="internal"&&t!=="loopback"))],E=Array.isArray(m.tlsCertificates)?m.tlsCertificates:[],g=E.filter((t)=>Number(t?.daysRemaining??999)<21).length;a.push({id:"dns",label:i.length===1?i[0]:"Public domains",kind:"dns",layer:1,status:g?"warn":i.length?"ok":"unknown",sub:i.length>1?`${i.length} domains`:"DNS & certificates",facts:[{label:"Domains",value:i.length?i.slice(0,6).join(", "):"none resolved"},{label:"Certificates",value:E.length?`${E.length} issued`:"none reported"},...g?[{label:"Expiring",value:`${g} within 21 days`}]:[]],href:"/server/security",external:!0});let v=m.firewall??{},w=Array.isArray(m.ports)?m.ports:[];a.push({id:"firewall",label:"Host firewall",kind:"firewall",layer:2,status:h(v.status),sub:e(v.summary,"Inbound filtering"),facts:[{label:"State",value:e(v.status,"unknown")},{label:"Open ports",value:w.length?w.map((t)=>e(t.listen)).join(", "):"not reported"}],href:"/server/firewall",group:"box"});let y=L.find((t)=>j.test(e(t.name)));a.push({id:"proxy",label:e(y?.name,"Reverse proxy"),kind:"proxy",layer:3,status:y?h(y.status):"unknown",sub:"TLS termination & routing",facts:[{label:"Service",value:e(y?.name,"not detected")},{label:"State",value:e(y?.status,C?"not running":"not probed")},{label:"Routes",value:`${c.length} site${c.length===1?"":"s"}`}],href:"/server/services",group:"box"});for(let t of c){let d=`site:${e(t.name)}`;if(!e(t.name))continue;a.push({id:d,label:e(t.name),kind:"site",layer:4,status:h(t.status),sub:e(t.runtime,"runtime"),facts:[{label:"Route",value:e(t.route,"internal")},{label:"Runtime",value:e(t.runtime,"unknown")},{label:"Delivery",value:e(t.deploy,"unknown")},{label:"TLS",value:e(t.tls,"unknown")},...t.responseMs!=null?[{label:"Response",value:`${Math.round(Number(t.responseMs))} ms`}]:[],...t.httpStatus!=null?[{label:"HTTP",value:String(t.httpStatus)}]:[]],href:"/server/sites",group:"box"})}for(let t of k){let d=`worker:${e(t.name)}`;if(!e(t.name))continue;a.push({id:d,label:e(t.name),kind:"worker",layer:5,status:h(t.status),sub:`${Number(t.processes??1)} process${Number(t.processes??1)===1?"":"es"}`,facts:[{label:"Processes",value:String(t.processes??1)},{label:"State",value:e(t.status,"unknown")},...e(t.site)?[{label:"Site",value:e(t.site)}]:[]],href:"/operations/jobs",group:"box"})}let A=n.serverScheduler??{};if(A.enabled)a.push({id:"scheduler",label:"Scheduler",kind:"scheduler",layer:5,status:"ok",sub:"Cron dispatch",facts:[{label:"Last run",value:e(A.lastRun,"unknown")}],href:"/operations/jobs",group:"box"});let l=L.map((t)=>{let d=e(t.name),s=P.find((p)=>p.match.test(d));return s?{service:t,name:d,...s}:null}).filter((t)=>!!t);for(let t of l)a.push({id:`data:${t.name}`,label:t.label,kind:t.kind,layer:6,status:h(t.service.status),sub:t.name,facts:[{label:"Unit",value:t.name},{label:"State",value:e(t.service.status,"unknown")}],href:"/data/services",group:"box"});let x=n.backup??{};if(x.enabled)a.push({id:"backup",label:"Backups",kind:"backup",layer:7,status:"ok",sub:e(x.destination,"destination"),facts:[{label:"Destination",value:e(x.destination,"unknown")},{label:"Schedule",value:e(x.schedule,"unknown")},{label:"Retention",value:`${x.retention??0} copies`},{label:"Last run",value:e(x.last,"unknown")}],href:"/data/backups"});let b=new Set(a.map((t)=>t.id));r(o,{source:"internet",target:"dns",flow:"request",label:"https"},b),r(o,{source:"dns",target:"firewall",flow:"request",label:"443/80"},b),r(o,{source:"firewall",target:"proxy",flow:"request"},b);for(let t of c){let d=`site:${e(t.name)}`;r(o,{source:"proxy",target:d,flow:"request",label:e(t.path)||void 0,status:h(t.status)},b)}for(let t of k){let d=`worker:${e(t.name)}`,s=`site:${e(t.site)}`;if(b.has(s))r(o,{source:s,target:d,flow:"async",label:"queue"},b);else r(o,{source:"proxy",target:d,flow:"async",label:"queue"},b)}for(let t of k)r(o,{source:"scheduler",target:`worker:${e(t.name)}`,flow:"async",label:"dispatch"},b);let D=[...c.map((t)=>`site:${e(t.name)}`),...k.map((t)=>`worker:${e(t.name)}`)];for(let t of l)for(let d of D)r(o,{source:d,target:`data:${t.name}`,flow:"data",label:"localhost"},b);if(l.length&&D.length)q.push("Data-service edges show co-location on the box: every process on it can reach localhost. They are not a declared per-site binding.");for(let t of l)r(o,{source:`data:${t.name}`,target:"backup",flow:"backup",label:"snapshot"},b);for(let t of c)r(o,{source:`site:${e(t.name)}`,target:"backup",flow:"backup"},b);return{mode:"server",project:e(u.project)||e(n.project?.name)||e(f.name,"project"),environment:e(u.environment)||e(n.environment,"production"),provider:e(f.provider,"unknown"),region:e(f.region,"unknown"),generatedAt:new Date().toISOString(),layers:M,groups:[{id:"box",label:e(f.name,"App server"),sub:[e(f.provider),e(f.region),e(f.ip)].filter(Boolean).join(" · ")}],nodes:a,links:o,notes:q}}function Va(n,u={}){let a=[],o=[],q=[],f=n.app??{},c=Array.isArray(n.functions)?n.functions:[],L=Array.isArray(n.queues)?n.queues:[],k=n.metrics??{};if(!c.length)q.push("No Lambda functions were read for this environment, so the compute layer is empty rather than assumed.");a.push({id:"internet",label:"Internet",kind:"internet",layer:0,status:"ok",sub:"Public traffic",facts:[],external:!0});let m=e(f.url),C=m.replace(/^https?:\/\//,"").split("/")[0];a.push({id:"dns",label:C||"Application domain",kind:"dns",layer:1,status:C?"ok":"unknown",sub:"DNS & certificates",facts:[{label:"Endpoint",value:m||"not resolved"}],external:!0});let T=n.waf;if(T)a.push({id:"waf",label:"WAF",kind:"waf",layer:2,status:h(T.status??"active"),sub:e(T.scope,"Managed rules"),facts:[{label:"Web ACL",value:e(T.name,"unnamed")},...T.blocked!=null?[{label:"Blocked (24h)",value:String(T.blocked)}]:[],{label:"Rules",value:String(F(n.wafRules))}],href:"/serverless/firewall"});let i=n.assetsInfo;if(i)a.push({id:"cdn",label:"Asset CDN",kind:"cdn",layer:2,status:"ok",sub:e(i.cdn,"CloudFront"),facts:[{label:"Distribution",value:e(i.cdn,"unknown")},{label:"Custom domain",value:e(i.customDomain,"none")}],href:"/serverless/assets"}),a.push({id:"assets",label:"Asset bucket",kind:"storage",layer:6,status:"ok",sub:e(i.bucket,"S3"),facts:[{label:"Bucket",value:e(i.bucket,"unknown")},...i.files?[{label:"Objects",value:String(i.files)}]:[],...i.sizeMb?[{label:"Size",value:`${i.sizeMb} MB`}]:[]],href:"/serverless/assets"});let E=c.find((s)=>e(s.key).startsWith("http"));a.push({id:"gateway",label:"HTTP entry point",kind:"gateway",layer:3,status:E?"ok":"unknown",sub:"Function URL / API Gateway",facts:[{label:"Endpoint",value:m||"not resolved"},{label:"Invocations (24h)",value:String(k.invocations??0)},...k.errorRatePct!=null?[{label:"Error rate",value:`${k.errorRatePct}%`}]:[]],href:"/serverless/metrics"});for(let s of c){let p=`fn:${e(s.name)}`;if(!e(s.name))continue;let S=Number(s.errors??0),R=Number(s.invocations??0);a.push({id:p,label:e(s.key,e(s.name)),kind:"function",layer:4,status:S>0?R&&S/R>0.02?"bad":"warn":R?"ok":"idle",sub:e(s.runtime,"lambda"),facts:[{label:"Function",value:e(s.name)},{label:"Memory",value:`${s.memory??0} MB`},{label:"Timeout",value:`${s.timeout??0}s`},{label:"Invocations (24h)",value:String(R)},{label:"Errors (24h)",value:String(S)},{label:"p95",value:`${s.p95??0} ms`},...s.provisioned?[{label:"Provisioned",value:e(s.provisioned)}]:[]],href:"/serverless/functions"})}for(let s of L){let p=`queue:${e(s.name)}`;if(!e(s.name))continue;let S=Number(s.dlq??0);a.push({id:p,label:e(s.name),kind:"queue",layer:5,status:S>0?"bad":Number(s.visible??0)>0?"warn":"ok",sub:"SQS",facts:[{label:"Visible",value:String(s.visible??0)},{label:"In flight",value:String(s.inFlight??0)},{label:"Processed (24h)",value:String(s.processed??0)},{label:"Dead letter",value:String(S)}],href:"/serverless/queues"})}let g=n.aurora;if(g)a.push({id:"database",label:"Aurora Serverless",kind:"database",layer:6,status:h(g.status),sub:e(g.engine,"aurora"),facts:[{label:"Cluster",value:e(g.id,"unknown")},{label:"Capacity",value:`${g.currentAcu??0} ACU (${g.minAcu??0}–${g.maxAcu??0})`},{label:"Connections",value:String(g.connections??0)}],href:"/serverless/data"});let v=n.proxy;if(v)a.push({id:"rds-proxy",label:"RDS Proxy",kind:"database",layer:5,status:h(v.status),sub:"Connection pooling",facts:[{label:"Proxy",value:e(v.name,"unknown")},{label:"Endpoint",value:e(v.endpoint,"unknown")},{label:"Pooled",value:String(v.pooledConns??0)}],href:"/serverless/data"});let w=n.redis;if(w)a.push({id:"cache",label:"ElastiCache",kind:"cache",layer:6,status:h(w.status),sub:e(w.node,"redis"),facts:[{label:"Group",value:e(w.id,"unknown")},{label:"Hit rate",value:`${w.hitRate??0}%`}],href:"/serverless/data"});let y=n.efs;if(y)a.push({id:"efs",label:"EFS",kind:"filesystem",layer:6,status:h(y.status),sub:e(y.mount,"/mnt/local"),facts:[{label:"File system",value:e(y.id,"unknown")},{label:"Mount",value:e(y.mount,"unknown")},{label:"Size",value:`${y.sizeMb??0} MB`}],href:"/data/volumes"});let A=n.scheduler??{};if(A.enabled)a.push({id:"scheduler",label:"Scheduler",kind:"scheduler",layer:3,status:"ok",sub:e(A.expression,"rate(1 minute)"),facts:[{label:"Expression",value:e(A.expression,"unknown")},{label:"Last run",value:e(A.lastRun,"unknown")}],href:"/operations/jobs"});let l=new Set(a.map((s)=>s.id)),x=l.has("waf")?"waf":"gateway";r(o,{source:"internet",target:"dns",flow:"request",label:"https"},l),r(o,{source:"dns",target:x,flow:"request"},l),r(o,{source:"dns",target:"cdn",flow:"request",label:"assets"},l),r(o,{source:"waf",target:"gateway",flow:"request",label:"allowed"},l),r(o,{source:"cdn",target:"assets",flow:"data",label:"origin"},l);let b=c.filter((s)=>e(s.key).startsWith("http")),D=c.filter((s)=>e(s.key).startsWith("queue")),t=c.filter((s)=>e(s.key).startsWith("cli"));for(let s of b)r(o,{source:"gateway",target:`fn:${e(s.name)}`,flow:"request",label:"invoke"},l);for(let s of t)r(o,{source:"scheduler",target:`fn:${e(s.name)}`,flow:"async",label:"schedule"},l);for(let s of L){for(let p of b)r(o,{source:`fn:${e(p.name)}`,target:`queue:${e(s.name)}`,flow:"async",label:"publish"},l);for(let p of D)r(o,{source:`queue:${e(s.name)}`,target:`fn:${e(p.name)}`,flow:"async",label:"consume"},l)}let d=["rds-proxy","database","cache","efs","assets"];for(let s of c){let p=`fn:${e(s.name)}`;if(l.has("rds-proxy"))r(o,{source:p,target:"rds-proxy",flow:"data",label:"pooled"},l);else r(o,{source:p,target:"database",flow:"data",label:"sql"},l);for(let S of d.filter((R)=>R!=="rds-proxy"&&R!=="database"))r(o,{source:p,target:S,flow:"data"},l)}return r(o,{source:"rds-proxy",target:"database",flow:"data",label:"sql"},l),{mode:"serverless",project:e(u.project)||e(f.name,"application"),environment:e(u.environment)||e(f.env,"production"),provider:"aws",region:e(f.region,"unknown"),generatedAt:new Date().toISOString(),layers:N,groups:[],nodes:a,links:o,notes:q}}
|
|
2
|
+
export{Qr,Va};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Cl,Al,Il,Rl,du,uu}from"./chunk-
|
|
1
|
+
import{Cl,Al,Il,Rl,du,uu}from"./chunk-7xvm2ygt.js";import"./chunk-5tsxt28g.js";import"./chunk-yhxpmk29.js";import"./chunk-vymg9ywg.js";import"./chunk-57w9nsjk.js";import"./chunk-80zkjpfz.js";import"./chunk-bckm6fre.js";export{du as deleteStaticSite,Al as deployStaticSite,uu as deployStaticSiteFull,Cl as generateStaticSiteTemplate,Rl as invalidateCache,Il as uploadStaticFiles};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Wa,oe,Ga,Yl,Mu,ui,Uu,Bu,ks,Fu,ju,Vu,zu,qu,Hu,Wu,Ka,Ja,Ds,xs,ho,Ke,A,_s,Xa,V,wr,C,Zl,pi,$s,Os,U,yo,Gu,Ku,Ju,Xu,l,s,Qu,Yu,E,Ls,Ms,Us,Zu,ep,Pe,Bs,So,ed,tp,rp,Le,vt,Je,ye,B,S,_,Xe,k,td,Tt,pe,Mt,np,rd,Se,bo,Me,Ut,mi,be,vo,Ne,nd,gi,ve,Te,ee,fi,G,Bt,Et,Ee,t,To,ip,Qa,Fs,op,sp,ap,cp,js,lp,dp,up,pp,mp,gp,fp,hp,yp,Sp,bp,vp,id,od,sd,ad,cd,ld,dd,Ft,Ya,Za,Cr,hi,Tp,ec,Ep,wp,tn,Cp,Ap,Ip,Rp,Pp,Np,ud,pd,md,gd,fd,Eo,kp,Vs,hd,yd,Sd,tc,we,Dp,bd,wt,wo,Ar,vd,rc,Td,Ed,wd,nc,ke,xp,_p,$p,Op,Cd,Lp,Ce,Mp,Up,Bp,ic,oc,Fp,sc,ac,jp,Vp,zp,qp,Hp,Ad,zs,Wp,Gp,Kp,Jp,Xp,Id,Rd,Qp,Yp,Zp,em,tm,rm,nm,im,om,cc,qs,sm,am,cm,lm,lc,dc,uc,dm,pc,um,pm,mm,gm,mc,fm,hm,ym,Sm,bm,vm,Tm,Em,Pd,Nd,kd,Dd,gc,wm,Cm,Am,Im,Rm,Pm,Nm,km,Dm,xd,_d,$d,Od,xm,_m,fc,$m,hc,yc,Sc,bc,Om,Lm,Mm,Um,Qe,yi,Bm,Fm,jm,Vm,zm,qm,Hm,Wm,Ld,Gm,Km,vc,Tc,Jm,Xm,Md,Qm,Ym,Zm,eg,tg,rg,ng,ig,og,sg,ag,cg,lg,dg,ug,pg,mg,gg,fg,hg,yg,Ec,Sg,wc,bg,Cc,vg,Ac,Tg,Ic,Eg,rn,wg,Rc,Cg,Co,Ag,Pc,Ig,Nc,Rg,kc,Pg,Dc,Ng,xc,kg,nn,Dg,_c,xg,$c,_g,Oc,$g,Lc,Og,Mc,Lg,Uc,Mg,Bc,Ug,Fc,Bg,jc,Fg,Vc,jg,zc,Vg,qc,zg,Hc,qg,Wc,Hg,Gc,Wg,Kc,Gg,Jc,Kg,Xc,Jg,Qc,Xg,Yc,Qg,Zc,Yg,el,Zg,tl,ef,rl,tf,nl,rf,Ud,Bd,Fd,jd,il,nf,ol,of,sl,sf,al,af,Si,Vd,zd,Ao,Hs,on,qd,Io,jt,Ws,Gs,Hd,Wd,cl,Gd,Ks,ll,cf,lf,Js,Xs,Qs,dl,Ro,ul,pl,Ys,ml,gl,fl,Kd,Jd,Xd,df,Qd,Yd,uf,Zd,hl,eu,tu,ru,pf,nu,bi,Zs,iu,mf,ou,Po,No,ea,yl,gf,Sl,ff,bl,hf,vl,yf,Tl,Sf}from"./chunk-6xw0r4gn.js";export{Pc as ABTestManager,Me as AI,Td as AWSAPIError,Cc as AWSConfigManager,ip as AWS_PSEUDO_PARAMETERS,Qe as AWS_REGIONS,vo as ApiGateway,To as Arn,ee as AssetHasher,ve as Auth,Ec as BackupManager,sl as BatchProcessingManager,Rc as BlueGreenManager,el as BounceComplaintHandler,Vc as BuildOptimizationManager,Je as CDN,Xs as CHAIN_HEADER,Ym as COMMON_CROSS_ACCOUNT_ROLES,mi as Cache,Co as CanaryManager,Bc as CertificateManager,wt as CloudError,Qa as CloudFormationBuilder,Sd as CloudFormationClient,bd as CloudFrontClient,Ac as CloudTrailManager,Od as CommandHistory,Ee as Communication,S as Compute,wo as ConfigurationError,zc as ContainerRegistryManager,Ar as CredentialError,hc as CrossRegionReferenceManager,od as DASHBOARD_ENTRY,sd as DASHBOARD_PORT_BASE,ad as DASHBOARD_PORT_SPAN,id as DASHBOARD_STATE_DIR,Ro as DEFAULT_RECURSION_LIMITS,Ce as DEFAULT_SERVICE_LIMITS,Ka as DEFAULT_STATE_DIR,Js as DEPTH_HEADER,ol as DLQMonitoringManager,ye as DNS,Yc as DNSSECManager,Ut as Database,Lc as DatabaseUserManager,ke as DebugLogger,ed as DependencyGraph,Te as Deployment,vd as DeploymentError,wc as DisasterRecoveryManager,k as Email,Ud as EmailAdvanced,tl as EmailAnalyticsManager,Bd as EmailHandlers,nl as EmailTemplateManager,Ed as ErrorCodes,il as FIFOQueueManager,ic as FileCache,Xe as FileSystem,t as Fn,yc as GlobalResourceManager,Ic as GuardDutyManager,Ad as HashCache,bl as HealthCheckManager,jc as ImageScanningManager,Mt as JobLoader,iu as LARAVEL_SERVERLESS_BUILD_STEPS,Gc as LambdaConcurrencyManager,Xc as LambdaDLQManager,Kc as LambdaDestinationsManager,Hc as LambdaLayersManager,Jc as LambdaVPCManager,Wc as LambdaVersionsManager,xc as LogsManager,qd as MANAGED_NODE_VERSIONS,Ya as MANAGEMENT_DASHBOARD_SITE_PREFIX,Ne as Messaging,Dc as MetricsManager,_c as MigrationManager,lc as MockCloudFormation,uc as MockDynamoDB,dc as MockS3,gi as Monitoring,vc as MultiAccountManager,fc as MultiRegionManager,Nd as MultiStepProgress,_ as Network,vl as NetworkSecurityManager,Tc as OrganizationManager,ou as PHP_DEFAULT_EXCLUDES,Hd as PHP_LAYER_EXTENSIONS,G as ParameterStore,Oc as PerformanceManager,be as Permissions,Tt as Phone,Fd as PhoneAdvanced,td as PhoneHandlers,pc as PreviewEnvironmentManager,mc as PreviewNotificationService,Pd as ProgressBar,Nc as ProgressiveDeploymentManager,Xu as Pseudo,pe as Queue,al as QueueManagementManager,Hu as QueuePresets,Md as RECOMMENDED_ACCOUNT_STRUCTURES,Qm as RECOMMENDED_SCPS,xd as REPL,$d as REPLCommandBuilder,_d as REPLContext,Id as RateLimiter,Wu as RealtimePresets,Ys as RecursionGuard,Et as Redirects,Sc as RegionPairManager,vt as Registry,$c as ReplicaManager,Tl as ResourceManagementManager,Zc as Route53ResolverManager,Qc as Route53RoutingManager,tc as S3Client,we as S3Error,Se as SMS,Ja as STATE_DIR_ENV_VAR,Bt as Search,fi as Secrets,Uc as SecretsManager,Mc as SecretsRotationManager,B as Security,rn as SecurityHubManager,Fc as SecurityScanningManager,rl as SenderReputationManager,qc as ServiceMeshManager,bo as Sftp,jd as SmsAdvanced,rd as SmsHandlers,kd as Spinner,bc as StackDependencyManager,np as StacksIntegration,yl as StaticSiteManager,Le as Storage,Sl as StorageAdvancedManager,nn as SyntheticsManager,Qs as TRACE_HEADER,Dd as TaskList,yo as TemplateBuilder,oc as TemplateCache,rc as ValidationError,nd as Workflow,kc as XRayManager,Ig as abTestManager,tp as analyzeStackDiff,Hs as artifactKey,Rm as autocomplete,vg as awsConfigManager,Sg as backupManager,Wp as batch,sf as batchProcessingManager,Cg as blueGreenManager,Zg as bounceComplaintHandler,lf as buildBunRuntimeLayerZip,Fs as buildCloudFormationTemplate,Os as buildMailEnv,cf as buildNodeRuntimeLayerZip,jg as buildOptimizationManager,mf as buildPhpRuntimeLayerZip,Ag as canaryManager,tm as categorizeChanges,Ug as certificateManager,Op as checkIAMPermissions,Qd as checkInvocation,Mp as checkServiceQuotas,Rd as chunk,ju as clearSigningKeyCache,im as cloudConfigSchema,Tg as cloudTrailManager,No as collectPhpAppEntries,Ep as composePresets,Gs as composeServerlessAppTemplate,Vg as containerRegistryManager,dp as createApiBackendPreset,ru as createCliHandler,kp as createCredentialProvider,vp as createDashboardSite,fp as createDataPipelinePreset,nc as createError,js as createExistingStaticFullStackPreset,lp as createFullStackAppPreset,pf as createHandlers,eu as createHttpHandler,pp as createJamstackPreset,Sp as createLaravelPreset,hp as createMLApiPreset,mp as createMicroservicesPreset,dm as createMockAWS,sp as createNodeJsServerPreset,ap as createNodeJsServerlessPreset,wp as createPreset,Yl as createPresignedUrl,Mu as createPresignedUrlAsync,tu as createQueueHandler,gp as createRealtimeAppPreset,Dp as createS3Client,bp as createServerlessLaravelPreset,cp as createServerlessNodePreset,op as createStaticSitePreset,yp as createTraditionalWebAppPreset,up as createWordPressPreset,Si as createZip,Om as crossRegionReferenceManager,Og as databaseUserManager,cc as defaultLocalConfig,wr as deploymentCoexistenceError,cd as deriveManagementDashboardPort,Xa as detectDeploymentTargets,_p as detectMisconfigurations,Wa as detectServiceRegion,Yp as diffTemplates,of as dlqMonitoringManager,Qg as dnssecManager,bg as drManager,ef as emailAnalyticsManager,rf as emailTemplateManager,Zd as eventToRequest,ec as extendPreset,nf as fifoQueueManager,Hp as findChangedFiles,rg as formatAccountStructure,bm as formatBytes,rp as formatDiff,vm as formatDuration,Nm as formatFlagSuggestions,xm as formatHistory,_m as formatHistoryStats,Em as formatKeyValue,Tm as formatList,Sm as formatProgressBar,Ld as formatRegion,Gm as formatRegionList,wm as formatSuggestion,hm as formatTable,ym as formatTree,md as fromEC2Metadata,gd as fromECSMetadata,ud as fromEnvironment,pd as fromSharedCredentials,fd as fromWebIdentity,dl as functionFingerprint,Ks as generateAppImageDockerfile,hg as generateApprovalConfig,Vd as generateBootstrap,mm as generateCleanupWorkflow,gm as generateCostReportWorkflow,eg as generateCrossAccountRoleCF,mg as generateDeploymentConfig,cg as generateDeploymentPipeline,ng as generateDeploymentWorkflow,s as generateLogicalId,pg as generateManualPipeline,ag as generateMatrixWorkflow,gg as generateMultiEnvConfig,lg as generateMultiEnvPipeline,ig as generateMultiEnvWorkflow,og as generatePRPreviewWorkflow,yg as generateParallelConfig,nu as generatePhpFpmConfig,Gd as generatePhpLayerDockerfile,dg as generatePreviewPipeline,pm as generatePreviewWorkflow,l as generateResourceName,fg as generateScheduledConfig,ug as generateScheduledPipeline,sg as generateScheduledWorkflow,yd as getAccountId,Bm as getAllRegions,qm as getClosestRegion,km as getCommandUsage,Am as getContextualHelp,Eo as getCredentials,rm as getDeploymentStrategy,nm as getDiffStats,Zp as getDiffSummary,wd as getErrorDetails,qs as getLocalConfig,cm as getLocalCredentials,am as getLocalEndpoint,lm as getLocalEnvVars,Up as getQuotaUsageSummary,Zm as getRecommendedStructure,yi as getRegion,Km as getRegionStats,jm as getRegionsByCompliance,Fm as getRegionsByLocation,Vm as getRegionsByPricingTier,Cd as getRequiredPermissions,Vu as getSigningKeyCacheSize,Qu as getTimestamp,Lm as globalResourceManager,Eg as guardDutyManager,Ft as hasManagementDashboardSite,jp as hashBuffer,Vp as hashDirectory,sc as hashFile,zp as hashManifest,ac as hashString,hf as healthCheckManager,Fg as imageScanningManager,pl as inspectInvocation,Jd as installRecursionFetch,fl as invocationContext,Cm as isLikelyTypo,sm as isLocalDevelopment,Cr as isManagementDashboardSiteName,zu as isNodeCryptoAvailable,xs as isStateDirConfigured,_s as isStatePath,zm as isValidRegion,qu as isWebCryptoAvailable,Wg as lambdaConcurrencyManager,Jg as lambdaDLQManager,Gg as lambdaDestinationsManager,qg as lambdaLayersManager,Kg as lambdaVPCManager,Hg as lambdaVersionsManager,Zs as laravelServerlessEnvDefaults,kg as logsManager,Zl as mailEnabled,$s as mailFirewallPorts,ui as makeAWSRequest,Bu as makeAWSRequestAsync,Uu as makeAWSRequestOnce,Za as managementDashboardSiteName,tn as mergeInfrastructure,Ng as metricsManager,xg as migrationManager,Jm as multiAccountManager,$m as multiRegionManager,yf as networkSecurityManager,Xm as organizationManager,ea as packagePhpApp,on as packageServerlessApp,zs as parallel,Gp as parallelMap,Kp as parallelWithRetry,ul as parseChain,Fu as parseJSONResponse,ks as parseXMLResponse,$g as performanceManager,cl as phpLayerBuildStage,Wd as phpLayerPackages,bi as phpRuntimeLayerAssets,um as previewManager,fm as previewNotifications,Qp as processInChunks,Rg as progressiveDeploymentManager,ml as propagationHeaders,af as queueManagementManager,qp as quickHash,gl as recursionBlockedResponse,Mm as regionPairManager,_g as replicaManager,em as requiresReplacement,df as resetRecursionRuntime,uf as resolveApp,C as resolveAppDatabase,U as resolveCloudProvider,Vs as resolveCredentials,ld as resolveDashboardDomain,dd as resolveDashboardDomains,ep as resolveDeployBucketName,V as resolveDeploymentMode,pi as resolveMailService,Tp as resolveManagementDashboardSite,hi as resolveManagementDashboardSites,E as resolveProjectStackName,Ws as resolveQueueNames,jt as resolveQueues,Kd as resolveRecursionConfig,hd as resolveRegion,Pe as resolveServerlessAppStackName,Bs as resolveServerlessArtifactBucketName,So as resolveServerlessAssetBucketName,Io as resolveServerlessRuntime,Us as resolveSiteBucketName,Ms as resolveSiteResourceName,Ls as resolveSiteStackName,A as resolveStatePath,Zu as resolveStorageBucketName,Sf as resourceManagementManager,hl as responseToResult,Yg as route53ResolverManager,Xg as route53RoutingManager,zd as runBuildHooks,Po as runPhpBuildHooks,Yu as sanitizeName,Im as searchCommands,Mg as secretsManager,Lg as secretsRotationManager,wg as securityHubManager,Bg as securityScanningManager,tf as senderReputationManager,Jp as sequence,zg as serviceMeshManager,Ds as setStateDir,Ao as sha256,Xd as sharedRecursionGuard,ll as sharedRuntimeLoop,oe as signRequest,Ga as signRequestAsync,Um as stackDependencyManager,ho as stateDir,Ke as statePath,gf as staticSiteManager,ff as storageAdvancedManager,gc as suggestCommand,Pm as suggestFlags,Lp as suggestIAMPolicy,Bp as suggestQuotaIncrease,Wm as suggestRegionPairs,Hm as suggestRegions,Dg as syntheticsManager,Fp as templateCache,tg as validateAccountStructure,om as validateAgainstSchema,Dm as validateCommand,xp as validateConfiguration,$p as validateCredentials,Ju as validateResourceLimits,Gu as validateTemplate,Ku as validateTemplateSize,Pp as withCDN,Rp as withCache,Ip as withDatabase,Yd as withInvocation,Cp as withMonitoring,Np as withQueue,Ap as withSecurity,Xp as withTimeout,Pg as xrayManager};
|
|
1
|
+
import{Wa,oe,Ga,Yl,Mu,ui,Uu,Bu,ks,Fu,ju,Vu,zu,qu,Hu,Wu,Ka,Ja,Ds,xs,ho,Je,A,_s,Xa,V,wr,C,Zl,pi,$s,Os,U,yo,Gu,Ku,Ju,Xu,l,s,Qu,Yu,E,Ls,Ms,Us,Zu,ep,Pe,Bs,So,ed,tp,rp,Le,vt,Xe,Se,B,S,_,Qe,k,td,Tt,pe,Mt,np,rd,be,bo,Me,Ut,mi,ve,vo,Ne,nd,gi,Te,Ee,ee,fi,G,Bt,Et,we,t,To,ip,Qa,Fs,op,sp,ap,cp,js,lp,dp,up,pp,mp,gp,fp,hp,yp,Sp,bp,vp,id,od,sd,ad,cd,ld,dd,Ft,Ya,Za,Cr,hi,Tp,ec,Ep,wp,rn,Cp,Ap,Ip,Rp,Pp,Np,ud,pd,md,gd,fd,Eo,kp,Vs,hd,yd,Sd,tc,Ce,Dp,bd,wt,wo,Ar,vd,rc,Td,Ed,wd,nc,ke,xp,_p,$p,Op,Cd,Lp,Ae,Mp,Up,Bp,ic,oc,Fp,sc,ac,jp,Vp,zp,qp,Hp,Ad,zs,Wp,Gp,Kp,Jp,Xp,Id,Rd,Qp,Yp,Zp,em,tm,rm,nm,im,om,cc,qs,sm,am,cm,lm,lc,dc,uc,dm,pc,um,pm,mm,gm,mc,fm,hm,ym,Sm,bm,vm,Tm,Em,Pd,Nd,kd,Dd,gc,wm,Cm,Am,Im,Rm,Pm,Nm,km,Dm,xd,_d,$d,Od,xm,_m,fc,$m,hc,yc,Sc,bc,Om,Lm,Mm,Um,Ye,yi,Bm,Fm,jm,Vm,zm,qm,Hm,Wm,Ld,Gm,Km,vc,Tc,Jm,Xm,Md,Qm,Ym,Zm,eg,tg,rg,ng,ig,og,sg,ag,cg,lg,dg,ug,pg,mg,gg,fg,hg,yg,Ec,Sg,wc,bg,Cc,vg,Ac,Tg,Ic,Eg,nn,wg,Rc,Cg,Co,Ag,Pc,Ig,Nc,Rg,kc,Pg,Dc,Ng,xc,kg,on,Dg,_c,xg,$c,_g,Oc,$g,Lc,Og,Mc,Lg,Uc,Mg,Bc,Ug,Fc,Bg,jc,Fg,Vc,jg,zc,Vg,qc,zg,Hc,qg,Wc,Hg,Gc,Wg,Kc,Gg,Jc,Kg,Xc,Jg,Qc,Xg,Yc,Qg,Zc,Yg,el,Zg,tl,ef,rl,tf,nl,rf,Ud,Bd,Fd,jd,il,nf,ol,of,sl,sf,al,af,Si,Vd,zd,Ao,Hs,sn,qd,Io,jt,Ws,Gs,Hd,Wd,cl,Gd,Ks,ll,cf,lf,Js,Xs,Qs,dl,Ro,ul,pl,Ys,ml,gl,fl,Kd,Jd,Xd,df,Qd,Yd,uf,Zd,hl,eu,tu,ru,pf,nu,bi,Zs,iu,mf,ou,Po,No,ea,yl,gf,Sl,ff,bl,hf,vl,yf,Tl,Sf}from"./chunk-8tbj9h2a.js";export{Pc as ABTestManager,Me as AI,Td as AWSAPIError,Cc as AWSConfigManager,ip as AWS_PSEUDO_PARAMETERS,Ye as AWS_REGIONS,vo as ApiGateway,To as Arn,ee as AssetHasher,Te as Auth,Ec as BackupManager,sl as BatchProcessingManager,Rc as BlueGreenManager,el as BounceComplaintHandler,Vc as BuildOptimizationManager,Xe as CDN,Xs as CHAIN_HEADER,Ym as COMMON_CROSS_ACCOUNT_ROLES,mi as Cache,Co as CanaryManager,Bc as CertificateManager,wt as CloudError,Qa as CloudFormationBuilder,Sd as CloudFormationClient,bd as CloudFrontClient,Ac as CloudTrailManager,Od as CommandHistory,we as Communication,S as Compute,wo as ConfigurationError,zc as ContainerRegistryManager,Ar as CredentialError,hc as CrossRegionReferenceManager,od as DASHBOARD_ENTRY,sd as DASHBOARD_PORT_BASE,ad as DASHBOARD_PORT_SPAN,id as DASHBOARD_STATE_DIR,Ro as DEFAULT_RECURSION_LIMITS,Ae as DEFAULT_SERVICE_LIMITS,Ka as DEFAULT_STATE_DIR,Js as DEPTH_HEADER,ol as DLQMonitoringManager,Se as DNS,Yc as DNSSECManager,Ut as Database,Lc as DatabaseUserManager,ke as DebugLogger,ed as DependencyGraph,Ee as Deployment,vd as DeploymentError,wc as DisasterRecoveryManager,k as Email,Ud as EmailAdvanced,tl as EmailAnalyticsManager,Bd as EmailHandlers,nl as EmailTemplateManager,Ed as ErrorCodes,il as FIFOQueueManager,ic as FileCache,Qe as FileSystem,t as Fn,yc as GlobalResourceManager,Ic as GuardDutyManager,Ad as HashCache,bl as HealthCheckManager,jc as ImageScanningManager,Mt as JobLoader,iu as LARAVEL_SERVERLESS_BUILD_STEPS,Gc as LambdaConcurrencyManager,Xc as LambdaDLQManager,Kc as LambdaDestinationsManager,Hc as LambdaLayersManager,Jc as LambdaVPCManager,Wc as LambdaVersionsManager,xc as LogsManager,qd as MANAGED_NODE_VERSIONS,Ya as MANAGEMENT_DASHBOARD_SITE_PREFIX,Ne as Messaging,Dc as MetricsManager,_c as MigrationManager,lc as MockCloudFormation,uc as MockDynamoDB,dc as MockS3,gi as Monitoring,vc as MultiAccountManager,fc as MultiRegionManager,Nd as MultiStepProgress,_ as Network,vl as NetworkSecurityManager,Tc as OrganizationManager,ou as PHP_DEFAULT_EXCLUDES,Hd as PHP_LAYER_EXTENSIONS,G as ParameterStore,Oc as PerformanceManager,ve as Permissions,Tt as Phone,Fd as PhoneAdvanced,td as PhoneHandlers,pc as PreviewEnvironmentManager,mc as PreviewNotificationService,Pd as ProgressBar,Nc as ProgressiveDeploymentManager,Xu as Pseudo,pe as Queue,al as QueueManagementManager,Hu as QueuePresets,Md as RECOMMENDED_ACCOUNT_STRUCTURES,Qm as RECOMMENDED_SCPS,xd as REPL,$d as REPLCommandBuilder,_d as REPLContext,Id as RateLimiter,Wu as RealtimePresets,Ys as RecursionGuard,Et as Redirects,Sc as RegionPairManager,vt as Registry,$c as ReplicaManager,Tl as ResourceManagementManager,Zc as Route53ResolverManager,Qc as Route53RoutingManager,tc as S3Client,Ce as S3Error,be as SMS,Ja as STATE_DIR_ENV_VAR,Bt as Search,fi as Secrets,Uc as SecretsManager,Mc as SecretsRotationManager,B as Security,nn as SecurityHubManager,Fc as SecurityScanningManager,rl as SenderReputationManager,qc as ServiceMeshManager,bo as Sftp,jd as SmsAdvanced,rd as SmsHandlers,kd as Spinner,bc as StackDependencyManager,np as StacksIntegration,yl as StaticSiteManager,Le as Storage,Sl as StorageAdvancedManager,on as SyntheticsManager,Qs as TRACE_HEADER,Dd as TaskList,yo as TemplateBuilder,oc as TemplateCache,rc as ValidationError,nd as Workflow,kc as XRayManager,Ig as abTestManager,tp as analyzeStackDiff,Hs as artifactKey,Rm as autocomplete,vg as awsConfigManager,Sg as backupManager,Wp as batch,sf as batchProcessingManager,Cg as blueGreenManager,Zg as bounceComplaintHandler,lf as buildBunRuntimeLayerZip,Fs as buildCloudFormationTemplate,Os as buildMailEnv,cf as buildNodeRuntimeLayerZip,jg as buildOptimizationManager,mf as buildPhpRuntimeLayerZip,Ag as canaryManager,tm as categorizeChanges,Ug as certificateManager,Op as checkIAMPermissions,Qd as checkInvocation,Mp as checkServiceQuotas,Rd as chunk,ju as clearSigningKeyCache,im as cloudConfigSchema,Tg as cloudTrailManager,No as collectPhpAppEntries,Ep as composePresets,Gs as composeServerlessAppTemplate,Vg as containerRegistryManager,dp as createApiBackendPreset,ru as createCliHandler,kp as createCredentialProvider,vp as createDashboardSite,fp as createDataPipelinePreset,nc as createError,js as createExistingStaticFullStackPreset,lp as createFullStackAppPreset,pf as createHandlers,eu as createHttpHandler,pp as createJamstackPreset,Sp as createLaravelPreset,hp as createMLApiPreset,mp as createMicroservicesPreset,dm as createMockAWS,sp as createNodeJsServerPreset,ap as createNodeJsServerlessPreset,wp as createPreset,Yl as createPresignedUrl,Mu as createPresignedUrlAsync,tu as createQueueHandler,gp as createRealtimeAppPreset,Dp as createS3Client,bp as createServerlessLaravelPreset,cp as createServerlessNodePreset,op as createStaticSitePreset,yp as createTraditionalWebAppPreset,up as createWordPressPreset,Si as createZip,Om as crossRegionReferenceManager,Og as databaseUserManager,cc as defaultLocalConfig,wr as deploymentCoexistenceError,cd as deriveManagementDashboardPort,Xa as detectDeploymentTargets,_p as detectMisconfigurations,Wa as detectServiceRegion,Yp as diffTemplates,of as dlqMonitoringManager,Qg as dnssecManager,bg as drManager,ef as emailAnalyticsManager,rf as emailTemplateManager,Zd as eventToRequest,ec as extendPreset,nf as fifoQueueManager,Hp as findChangedFiles,rg as formatAccountStructure,bm as formatBytes,rp as formatDiff,vm as formatDuration,Nm as formatFlagSuggestions,xm as formatHistory,_m as formatHistoryStats,Em as formatKeyValue,Tm as formatList,Sm as formatProgressBar,Ld as formatRegion,Gm as formatRegionList,wm as formatSuggestion,hm as formatTable,ym as formatTree,md as fromEC2Metadata,gd as fromECSMetadata,ud as fromEnvironment,pd as fromSharedCredentials,fd as fromWebIdentity,dl as functionFingerprint,Ks as generateAppImageDockerfile,hg as generateApprovalConfig,Vd as generateBootstrap,mm as generateCleanupWorkflow,gm as generateCostReportWorkflow,eg as generateCrossAccountRoleCF,mg as generateDeploymentConfig,cg as generateDeploymentPipeline,ng as generateDeploymentWorkflow,s as generateLogicalId,pg as generateManualPipeline,ag as generateMatrixWorkflow,gg as generateMultiEnvConfig,lg as generateMultiEnvPipeline,ig as generateMultiEnvWorkflow,og as generatePRPreviewWorkflow,yg as generateParallelConfig,nu as generatePhpFpmConfig,Gd as generatePhpLayerDockerfile,dg as generatePreviewPipeline,pm as generatePreviewWorkflow,l as generateResourceName,fg as generateScheduledConfig,ug as generateScheduledPipeline,sg as generateScheduledWorkflow,yd as getAccountId,Bm as getAllRegions,qm as getClosestRegion,km as getCommandUsage,Am as getContextualHelp,Eo as getCredentials,rm as getDeploymentStrategy,nm as getDiffStats,Zp as getDiffSummary,wd as getErrorDetails,qs as getLocalConfig,cm as getLocalCredentials,am as getLocalEndpoint,lm as getLocalEnvVars,Up as getQuotaUsageSummary,Zm as getRecommendedStructure,yi as getRegion,Km as getRegionStats,jm as getRegionsByCompliance,Fm as getRegionsByLocation,Vm as getRegionsByPricingTier,Cd as getRequiredPermissions,Vu as getSigningKeyCacheSize,Qu as getTimestamp,Lm as globalResourceManager,Eg as guardDutyManager,Ft as hasManagementDashboardSite,jp as hashBuffer,Vp as hashDirectory,sc as hashFile,zp as hashManifest,ac as hashString,hf as healthCheckManager,Fg as imageScanningManager,pl as inspectInvocation,Jd as installRecursionFetch,fl as invocationContext,Cm as isLikelyTypo,sm as isLocalDevelopment,Cr as isManagementDashboardSiteName,zu as isNodeCryptoAvailable,xs as isStateDirConfigured,_s as isStatePath,zm as isValidRegion,qu as isWebCryptoAvailable,Wg as lambdaConcurrencyManager,Jg as lambdaDLQManager,Gg as lambdaDestinationsManager,qg as lambdaLayersManager,Kg as lambdaVPCManager,Hg as lambdaVersionsManager,Zs as laravelServerlessEnvDefaults,kg as logsManager,Zl as mailEnabled,$s as mailFirewallPorts,ui as makeAWSRequest,Bu as makeAWSRequestAsync,Uu as makeAWSRequestOnce,Za as managementDashboardSiteName,rn as mergeInfrastructure,Ng as metricsManager,xg as migrationManager,Jm as multiAccountManager,$m as multiRegionManager,yf as networkSecurityManager,Xm as organizationManager,ea as packagePhpApp,sn as packageServerlessApp,zs as parallel,Gp as parallelMap,Kp as parallelWithRetry,ul as parseChain,Fu as parseJSONResponse,ks as parseXMLResponse,$g as performanceManager,cl as phpLayerBuildStage,Wd as phpLayerPackages,bi as phpRuntimeLayerAssets,um as previewManager,fm as previewNotifications,Qp as processInChunks,Rg as progressiveDeploymentManager,ml as propagationHeaders,af as queueManagementManager,qp as quickHash,gl as recursionBlockedResponse,Mm as regionPairManager,_g as replicaManager,em as requiresReplacement,df as resetRecursionRuntime,uf as resolveApp,C as resolveAppDatabase,U as resolveCloudProvider,Vs as resolveCredentials,ld as resolveDashboardDomain,dd as resolveDashboardDomains,ep as resolveDeployBucketName,V as resolveDeploymentMode,pi as resolveMailService,Tp as resolveManagementDashboardSite,hi as resolveManagementDashboardSites,E as resolveProjectStackName,Ws as resolveQueueNames,jt as resolveQueues,Kd as resolveRecursionConfig,hd as resolveRegion,Pe as resolveServerlessAppStackName,Bs as resolveServerlessArtifactBucketName,So as resolveServerlessAssetBucketName,Io as resolveServerlessRuntime,Us as resolveSiteBucketName,Ms as resolveSiteResourceName,Ls as resolveSiteStackName,A as resolveStatePath,Zu as resolveStorageBucketName,Sf as resourceManagementManager,hl as responseToResult,Yg as route53ResolverManager,Xg as route53RoutingManager,zd as runBuildHooks,Po as runPhpBuildHooks,Yu as sanitizeName,Im as searchCommands,Mg as secretsManager,Lg as secretsRotationManager,wg as securityHubManager,Bg as securityScanningManager,tf as senderReputationManager,Jp as sequence,zg as serviceMeshManager,Ds as setStateDir,Ao as sha256,Xd as sharedRecursionGuard,ll as sharedRuntimeLoop,oe as signRequest,Ga as signRequestAsync,Um as stackDependencyManager,ho as stateDir,Je as statePath,gf as staticSiteManager,ff as storageAdvancedManager,gc as suggestCommand,Pm as suggestFlags,Lp as suggestIAMPolicy,Bp as suggestQuotaIncrease,Wm as suggestRegionPairs,Hm as suggestRegions,Dg as syntheticsManager,Fp as templateCache,tg as validateAccountStructure,om as validateAgainstSchema,Dm as validateCommand,xp as validateConfiguration,$p as validateCredentials,Ju as validateResourceLimits,Gu as validateTemplate,Ku as validateTemplateSize,Pp as withCDN,Rp as withCache,Ip as withDatabase,Yd as withInvocation,Cp as withMonitoring,Np as withQueue,Ap as withSecurity,Xp as withTimeout,Pg as xrayManager};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A}from"./chunk-
|
|
1
|
+
import{A}from"./chunk-8tbj9h2a.js";var ie=["project:read","config:read","config:write","deployments:read","deployments:create","deployments:cancel","deployments:rollback","runtime:read","runtime:restart","runtime:logs","runtime:terminal","data:read","data:write","data:admin","backups:read","backups:create","backups:restore","secrets:read","secrets:write","fleet:read","fleet:manage","users:read","users:manage","users:transfer-ownership","audit:read","billing:read","billing:manage","security:read","security:manage","security:waive","sources:read","sources:manage","applications:read","applications:manage","automation:read","automation:manage","tags:manage"],K=["project:read","config:read","deployments:read","runtime:read","runtime:logs","data:read","backups:read","security:read","sources:read","applications:read","billing:read"],oe={owner:new Set(ie),admin:new Set(ie.filter((e)=>e!=="users:transfer-ownership")),deployer:new Set([...K,"deployments:create","deployments:cancel","deployments:rollback","sources:manage","applications:manage"]),operator:new Set([...K,"runtime:restart","backups:create","security:manage","sources:manage","applications:manage"]),viewer:new Set(K),auditor:new Set(["project:read","config:read","deployments:read","runtime:read","data:read","backups:read","audit:read","security:read","sources:read","applications:read"])};function Zr(e){return oe[e]}function P(e,t){if(e.type==="organization")return e.id===void 0||e.id===t.organizationId;if(!e.id)return!1;if(e.type==="project")return e.id===t.projectId;if(e.type==="environment")return e.id===t.environmentId;return e.id===t.resourceId}function Z(e){let{membership:t,capability:r,target:i}=e;if(!t||t.status!=="active"||t.organizationId!==i.organizationId)return{allowed:!1,reason:"inactive-membership"};let a=e.grants.filter((s)=>s.organizationId===i.organizationId&&s.membershipId===t.id&&s.capability===r&&P(s.scope,i)),E=a.find((s)=>s.effect==="deny");if(E)return{allowed:!1,reason:"explicit-deny",inheritedFrom:{kind:"grant",id:E.id,scope:E.scope}};let T=a.find((s)=>s.effect==="allow");if(T)return{allowed:!0,reason:"explicit-allow",inheritedFrom:{kind:"grant",id:T.id,scope:T.scope}};if(!P(t.scope,i))return{allowed:!1,reason:"scope-mismatch"};if(Zr(t.roleTemplate).has(r))return{allowed:!0,reason:"role-template",inheritedFrom:{kind:"membership",id:t.id,scope:t.scope}};return{allowed:!1,reason:"missing-capability"}}function en(e){return ie.filter((t)=>Z({...e,capability:t}).allowed)}import{createHash as S,randomBytes as Te}from"node:crypto";import{chmodSync as H,existsSync as ee,mkdirSync as se,statSync as de}from"node:fs";import{dirname as te}from"node:path";import{Database as Ne}from"bun:sqlite";var l=40,j=[{version:1,name:"core_control_plane",sql:`
|
|
2
2
|
CREATE TABLE projects (
|
|
3
3
|
id TEXT PRIMARY KEY,
|
|
4
4
|
slug TEXT NOT NULL UNIQUE,
|
|
@@ -1484,7 +1484,7 @@ import{A}from"./chunk-6xw0r4gn.js";var ie=["project:read","config:read","config:
|
|
|
1484
1484
|
WHERE organization_memberships.actor_id = ? AND organization_memberships.status = 'active' ORDER BY organizations.name COLLATE NOCASE`).all(e):this.database.query("SELECT * FROM organizations ORDER BY name COLLATE NOCASE").all()).map(z)}normalizeAuthorizationScope(e,t={type:"organization"}){if(t.type==="organization"){if(t.id&&t.id!==e)throw Error("Organization scope does not match the requested organization");return{type:"organization"}}if(!t.id)throw Error(`${t.type} scopes require an ID`);if(!this.resolveAuthorizationTarget(e,t))throw Error("Authorization scope was not found in this organization");return{type:t.type,id:t.id}}resolveAuthorizationTarget(e,t){if(!this.getOrganization(e))return;if(t.type==="organization")return{organizationId:e};if(!t.id)return;if(t.type==="project"){let i=this.database.query("SELECT id FROM projects WHERE id = ? AND organization_id = ?").get(t.id,e);return i?{organizationId:e,projectId:String(i.id)}:void 0}if(t.type==="environment"){let i=this.database.query("SELECT environments.id, environments.project_id FROM environments JOIN projects ON projects.id = environments.project_id WHERE environments.id = ? AND projects.organization_id = ?").get(t.id,e);return i?{organizationId:e,projectId:String(i.project_id),environmentId:String(i.id)}:void 0}let r=this.database.query(`SELECT resources.id, resources.project_id, resources.environment_id FROM resources
|
|
1485
1485
|
JOIN projects ON projects.id = resources.project_id WHERE resources.id = ? AND projects.organization_id = ?`).get(t.id,e);return r?{organizationId:e,projectId:String(r.project_id),environmentId:d(r.environment_id),resourceId:String(r.id)}:void 0}createMembership(e){if(!this.getActor(e.actorId))throw Error("Membership actor was not found");let t=this.normalizeAuthorizationScope(e.organizationId,e.scope);if(e.roleTemplate==="owner"&&t.type!=="organization")throw Error("Owners must be scoped to the organization");let r=e.id??this.idFn(),i=this.now();o(this.database,`INSERT INTO organization_memberships (id, organization_id, actor_id, role_template, scope_type, scope_id, source, created_at, updated_at)
|
|
1486
1486
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[r,e.organizationId,e.actorId,e.roleTemplate,t.type,t.id??null,e.source??"manual",i,i]);let a=this.getMembership(r);return this.appendEvent({organizationId:e.organizationId,actorId:e.performedByActorId,type:"organization.membership.created",payload:{membershipId:r,actorId:e.actorId,roleTemplate:e.roleTemplate,scope:g(t)}}),a}getMembership(e){let t=this.database.query("SELECT * FROM organization_memberships WHERE id = ?").get(e);return t?k(t):void 0}getMembershipForActor(e,t){let r=this.database.query("SELECT * FROM organization_memberships WHERE organization_id = ? AND actor_id = ?").get(e,t);return r?k(r):void 0}listMemberships(e,t={}){let r=t.includeRevoked?"":"AND status = 'active'";return this.database.query(`SELECT * FROM organization_memberships WHERE organization_id = ? ${r} ORDER BY created_at, id`).all(e).map(k)}updateMembership(e){let t=this.getMembership(e.id);if(!t)throw Error("Membership was not found");let r=this.normalizeAuthorizationScope(t.organizationId,e.scope??t.scope);if(e.roleTemplate==="owner"&&r.type!=="organization")throw Error("Owners must be scoped to the organization");if(t.roleTemplate==="owner"&&t.status==="active"&&(e.roleTemplate!=="owner"||r.type!=="organization"))this.assertAnotherOwner(t);return o(this.database,"UPDATE organization_memberships SET role_template = ?, scope_type = ?, scope_id = ?, session_version = session_version + 1, updated_at = ? WHERE id = ?",[e.roleTemplate,r.type,r.id??null,this.now(),t.id]),this.appendEvent({organizationId:t.organizationId,actorId:e.actorId,type:"organization.membership.updated",payload:{membershipId:t.id,from:{roleTemplate:t.roleTemplate,scope:g(t.scope)},to:{roleTemplate:e.roleTemplate,scope:g(r)}}}),this.getMembership(t.id)}revokeMembership(e,t){let r=this.getMembership(e);if(!r)throw Error("Membership was not found");if(r.status==="revoked")return r;if(r.roleTemplate==="owner")this.assertAnotherOwner(r);return o(this.database,"UPDATE organization_memberships SET status = 'revoked', session_version = session_version + 1, updated_at = ? WHERE id = ?",[this.now(),e]),this.appendEvent({organizationId:r.organizationId,actorId:t,type:"organization.membership.revoked",payload:{membershipId:e}}),this.getMembership(e)}touchMembership(e){let t=this.now();o(this.database,"UPDATE organization_memberships SET last_active_at = ?, updated_at = ? WHERE id = ? AND status = ?",[t,t,e,"active"]);let r=this.getMembership(e);if(!r)throw Error("Membership was not found");return r}assertAnotherOwner(e){if(Number(this.database.query("SELECT COUNT(*) AS count FROM organization_memberships WHERE organization_id = ? AND status = ? AND role_template = 'owner'").get(e.organizationId,"active")?.count??0)<=1)throw Error("Cannot remove or demote the last organization owner")}createInvitation(e){let t=e.email.trim().toLowerCase();if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)||t.length>254)throw Error("A valid invitation email is required");let r=this.normalizeAuthorizationScope(e.organizationId,e.scope);if(e.roleTemplate==="owner"&&r.type!=="organization")throw Error("Owners must be scoped to the organization");let i=Te(32).toString("base64url"),a=S("sha256").update(i).digest("hex"),E=e.id??this.idFn(),T=this.now(),s=new Date(this.nowFn().getTime()+Math.min(2592000000,Math.max(60000,e.expiresInMs??604800000))).toISOString();return o(this.database,`INSERT INTO organization_invitations (id, organization_id, email, role_template, scope_type, scope_id, token_hash, invited_by_actor_id, expires_at, created_at, updated_at)
|
|
1487
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[E,e.organizationId,t,e.roleTemplate,r.type,r.id??null,a,e.invitedByActorId??null,s,T,T]),this.appendEvent({organizationId:e.organizationId,actorId:e.invitedByActorId,type:"organization.invitation.created",payload:{invitationId:E,email:t,roleTemplate:e.roleTemplate,scope:g(r),expiresAt:s}}),{invitation:this.getInvitation(E),token:i}}getInvitation(e){let t=this.database.query("SELECT * FROM organization_invitations WHERE id = ?").get(e);return t?R(t,this.now()):void 0}listInvitations(e){return this.database.query("SELECT * FROM organization_invitations WHERE organization_id = ? ORDER BY created_at DESC").all(e).map((t)=>R(t,this.now()))}inspectInvitationToken(e){let t=S("sha256").update(e).digest("hex"),r=this.database.query("SELECT * FROM organization_invitations WHERE token_hash = ?").get(t);return r?R(r,this.now()):void 0}acceptInvitation(e,t){let r=S("sha256").update(e).digest("hex");return this.transaction(()=>{let i=this.database.query("SELECT * FROM organization_invitations WHERE token_hash = ?").get(r);if(!i)throw Error("Invitation is invalid");let a=R(i,this.now());if(a.state!=="pending")throw Error(`Invitation is ${a.state}`);if(!this.getActor(t))throw Error("Invitation actor was not found");if(o(this.database,"UPDATE organization_invitations SET accepted_by_actor_id = ?, accepted_at = ?, updated_at = ? WHERE id = ? AND accepted_at IS NULL AND revoked_at IS NULL AND expires_at > ?",[t,this.now(),this.now(),a.id,this.now()]).changes!==1)throw Error("Invitation is no longer available");let T=this.getMembershipForActor(a.organizationId,t),s=T??this.createMembership({organizationId:a.organizationId,actorId:t,roleTemplate:a.roleTemplate,scope:a.scope,source:"invitation"});if(T&&a.roleTemplate==="owner"&&T.roleTemplate!=="owner")s=this.updateMembership({id:T.id,roleTemplate:"owner",scope:{type:"organization"},actorId:t});else if(T)for(let c of
|
|
1487
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[E,e.organizationId,t,e.roleTemplate,r.type,r.id??null,a,e.invitedByActorId??null,s,T,T]),this.appendEvent({organizationId:e.organizationId,actorId:e.invitedByActorId,type:"organization.invitation.created",payload:{invitationId:E,email:t,roleTemplate:e.roleTemplate,scope:g(r),expiresAt:s}}),{invitation:this.getInvitation(E),token:i}}getInvitation(e){let t=this.database.query("SELECT * FROM organization_invitations WHERE id = ?").get(e);return t?R(t,this.now()):void 0}listInvitations(e){return this.database.query("SELECT * FROM organization_invitations WHERE organization_id = ? ORDER BY created_at DESC").all(e).map((t)=>R(t,this.now()))}inspectInvitationToken(e){let t=S("sha256").update(e).digest("hex"),r=this.database.query("SELECT * FROM organization_invitations WHERE token_hash = ?").get(t);return r?R(r,this.now()):void 0}acceptInvitation(e,t){let r=S("sha256").update(e).digest("hex");return this.transaction(()=>{let i=this.database.query("SELECT * FROM organization_invitations WHERE token_hash = ?").get(r);if(!i)throw Error("Invitation is invalid");let a=R(i,this.now());if(a.state!=="pending")throw Error(`Invitation is ${a.state}`);if(!this.getActor(t))throw Error("Invitation actor was not found");if(o(this.database,"UPDATE organization_invitations SET accepted_by_actor_id = ?, accepted_at = ?, updated_at = ? WHERE id = ? AND accepted_at IS NULL AND revoked_at IS NULL AND expires_at > ?",[t,this.now(),this.now(),a.id,this.now()]).changes!==1)throw Error("Invitation is no longer available");let T=this.getMembershipForActor(a.organizationId,t),s=T??this.createMembership({organizationId:a.organizationId,actorId:t,roleTemplate:a.roleTemplate,scope:a.scope,source:"invitation"});if(T&&a.roleTemplate==="owner"&&T.roleTemplate!=="owner")s=this.updateMembership({id:T.id,roleTemplate:"owner",scope:{type:"organization"},actorId:t});else if(T)for(let c of Zr(a.roleTemplate))this.upsertGrant({organizationId:a.organizationId,membershipId:T.id,effect:"allow",capability:c,scope:a.scope,source:"invitation"});return this.appendEvent({organizationId:a.organizationId,actorId:t,type:"organization.invitation.accepted",payload:{invitationId:a.id,membershipId:s.id}}),{invitation:this.getInvitation(a.id),membership:this.getMembership(s.id)}})}revokeInvitation(e,t){let r=this.getInvitation(e);if(!r)throw Error("Invitation was not found");if(r.acceptedAt)throw Error("Accepted invitations cannot be revoked");if(!r.revokedAt)o(this.database,"UPDATE organization_invitations SET revoked_at = ?, updated_at = ? WHERE id = ?",[this.now(),this.now(),e]);return this.appendEvent({organizationId:r.organizationId,actorId:t,type:"organization.invitation.revoked",payload:{invitationId:e}}),this.getInvitation(e)}reissueInvitation(e,t){let r=this.getInvitation(e);if(!r)throw Error("Invitation was not found");if(r.state==="accepted")throw Error("Accepted invitations cannot be reissued");return this.revokeInvitation(e,t),this.createInvitation({organizationId:r.organizationId,email:r.email,roleTemplate:r.roleTemplate,scope:r.scope,invitedByActorId:t})}upsertGrant(e){if(!ie.includes(e.capability))throw Error("Unknown authorization capability");let t=this.getMembership(e.membershipId);if(!t||t.organizationId!==e.organizationId)throw Error("Grant membership was not found in this organization");let r=this.normalizeAuthorizationScope(e.organizationId,e.scope),i=this.now(),a=this.database.query("SELECT * FROM authorization_grants WHERE membership_id = ? AND effect = ? AND capability = ? AND scope_type = ? AND scope_id IS ?").get(e.membershipId,e.effect,e.capability,r.type,r.id??null);if(a)return w(a);let E=e.id??this.idFn();return o(this.database,`INSERT INTO authorization_grants (id, organization_id, membership_id, effect, capability, scope_type, scope_id, source, created_at, updated_at)
|
|
1488
1488
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[E,e.organizationId,e.membershipId,e.effect,e.capability,r.type,r.id??null,e.source??"manual",i,i]),o(this.database,"UPDATE organization_memberships SET session_version = session_version + 1, updated_at = ? WHERE id = ?",[i,e.membershipId]),this.appendEvent({organizationId:e.organizationId,actorId:e.actorId,type:"organization.grant.created",payload:{grantId:E,membershipId:e.membershipId,effect:e.effect,capability:e.capability,scope:g(r)}}),this.getGrant(E)}getGrant(e){let t=this.database.query("SELECT * FROM authorization_grants WHERE id = ?").get(e);return t?w(t):void 0}listGrants(e){return this.database.query("SELECT * FROM authorization_grants WHERE membership_id = ? ORDER BY effect DESC, capability, scope_type, scope_id").all(e).map(w)}removeGrant(e,t){let r=this.getGrant(e);if(!r)return!1;let i=o(this.database,"DELETE FROM authorization_grants WHERE id = ?",[e]).changes===1;if(i)o(this.database,"UPDATE organization_memberships SET session_version = session_version + 1, updated_at = ? WHERE id = ?",[this.now(),r.membershipId]),this.appendEvent({organizationId:r.organizationId,actorId:t,type:"organization.grant.removed",payload:{grantId:e,membershipId:r.membershipId}});return i}createOperation(e){if(e.idempotencyKey){let a=this.database.query("SELECT * FROM operations WHERE idempotency_key = ?").get(e.idempotencyKey);if(a)return u(a)}let t=e.id??this.idFn(),r=e.correlationId??this.idFn(),i=this.now();try{return this.transaction(()=>(o(this.database,`INSERT INTO operations (id, project_id, environment_id, resource_id, actor_id, kind, state, correlation_id, idempotency_key, input, output, priority, created_at, updated_at)
|
|
1489
1489
|
VALUES (?, ?, ?, ?, ?, ?, 'queued', ?, ?, ?, '{}', ?, ?, ?)`,[t,e.projectId??null,e.environmentId??null,e.resourceId??null,e.actorId??null,e.kind,r,e.idempotencyKey??null,N(e.input??{}),e.priority??0,i,i]),this.appendEvent({projectId:e.projectId,operationId:t,resourceId:e.resourceId,actorId:e.actorId,correlationId:r,type:"operation.queued",payload:{kind:e.kind}}),this.getOperation(t)))}catch(a){if(e.idempotencyKey){let E=this.database.query("SELECT * FROM operations WHERE idempotency_key = ?").get(e.idempotencyKey);if(E)return u(E)}throw a}}getOperation(e){let t=this.database.query("SELECT * FROM operations WHERE id = ?").get(e);return t?u(t):void 0}listOperations(e={}){let t=[],r=[];if(e.projectId)t.push("project_id = ?"),r.push(e.projectId);if(e.state)t.push("state = ?"),r.push(e.state);if(e.kind)t.push("kind = ?"),r.push(e.kind);if(e.before)t.push("created_at < ?"),r.push(e.before);let i=Math.min(500,Math.max(1,e.limit??100));r.push(i);let a=t.length?`WHERE ${t.join(" AND ")}`:"";return this.database.query(`SELECT * FROM operations ${a} ORDER BY created_at DESC, id DESC LIMIT ?`).all(...r).map(u)}claimNextOperation(e,t=60000,r){let i=this.now(),a=new Date(this.nowFn().getTime()+t).toISOString();return this.transaction(()=>{let E=r?.length?`AND kind IN (${le(r.length)})`:"",T=r?[...r]:[],s=this.database.query(`SELECT * FROM operations WHERE state = 'queued' ${E} ORDER BY priority DESC, created_at ASC, id ASC LIMIT 1`).get(...T);if(!s)return;let c=u(s);if(o(this.database,`UPDATE operations SET state = 'running', attempt = attempt + 1, lease_owner = ?, lease_expires_at = ?,
|
|
1490
1490
|
started_at = COALESCE(started_at, ?), updated_at = ?, version = version + 1 WHERE id = ? AND state = 'queued' AND version = ?`,[e,a,i,i,c.id,c.version]).changes!==1)return;return this.appendEvent({projectId:c.projectId,operationId:c.id,resourceId:c.resourceId,actorId:c.actorId,correlationId:c.correlationId,type:"operation.running",payload:{attempt:c.attempt+1,workerId:e}}),this.getOperation(c.id)})}claimOperation(e,t,r=60000){let i=this.now(),a=new Date(this.nowFn().getTime()+r).toISOString();return this.transaction(()=>{let E=this.getOperation(e);if(!E||E.state!=="queued")return;if(o(this.database,`UPDATE operations SET state = 'running', attempt = attempt + 1, lease_owner = ?, lease_expires_at = ?,
|
|
@@ -1504,4 +1504,4 @@ import{A}from"./chunk-6xw0r4gn.js";var ie=["project:read","config:read","config:
|
|
|
1504
1504
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.id,i.organizationId,i.membershipId,i.effect,i.capability,i.scope.type,i.scope.id??null,i.source??"manual",i.createdAt,i.updatedAt]);for(let i of e.operations)o(this.database,`INSERT INTO operations (id, project_id, environment_id, resource_id, actor_id, kind, state, correlation_id, idempotency_key,
|
|
1505
1505
|
input, output, error, attempt, priority, lease_owner, lease_expires_at, cancel_requested_at, started_at, finished_at, version, created_at, updated_at)
|
|
1506
1506
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.id,i.projectId??null,i.environmentId??null,i.resourceId??null,i.actorId??null,i.kind,i.state,i.correlationId,i.idempotencyKey??null,N(i.input),N(i.output),M(i.error)??null,i.attempt,i.priority,i.leaseOwner??null,i.leaseExpiresAt??null,i.cancelRequestedAt??null,i.startedAt??null,i.finishedAt??null,i.version,i.createdAt,i.updatedAt]);for(let i of e.events)o(this.database,`INSERT INTO events (sequence, id, organization_id, project_id, operation_id, resource_id, actor_id, correlation_id, type, level, payload, created_at)
|
|
1507
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.sequence,i.id,i.organizationId??null,i.projectId??null,i.operationId??null,i.resourceId??null,i.actorId??null,i.correlationId,i.type,i.level,N(i.payload),i.createdAt]);for(let[i,a]of Object.entries(e.settings))o(this.database,"INSERT INTO settings (key, value, updated_at) VALUES (?, ?, ?)",[i,N(a),this.now()]);for(let i of e.tags??[])o(this.database,"INSERT INTO tags (id, project_id, name, normalized_name, color, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)",[i.id,i.projectId,i.name,i.normalizedName,i.color,i.createdAt,i.updatedAt]);for(let i of e.resourceTags??[])o(this.database,"INSERT INTO resource_tags (resource_id, tag_id, created_at) VALUES (?, ?, ?)",[i.resourceId,i.tagId,i.createdAt]);for(let i of e.savedFilters??[])o(this.database,"INSERT INTO saved_filters (id, actor_key, name, route_id, query, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)",[i.id,i.actorKey,i.name,i.routeId,N(i.query),i.createdAt,i.updatedAt]);for(let i of e.navigationItems??[])o(this.database,"INSERT INTO navigation_items (actor_key, entity_type, entity_id, favorite, last_visited_at, visit_count) VALUES (?, ?, ?, ?, ?, ?)",[i.actorKey,i.entityType,i.entityId,i.favorite?1:0,i.lastVisitedAt,i.visitCount])})}}var pe=new Set(["domain","domains","hostname","hostnames","url","repository","repo","image","label","labels"]),ue=new Set(["sha","commit","commitsha","release","releaseid"]);function ne(e,t){if(!e||typeof e!=="object"||Array.isArray(e))return[];let r=[];for(let[i,a]of Object.entries(e)){if(!t.has(i.toLowerCase()))continue;if(typeof a==="string")r.push(a);else if(Array.isArray(a))r.push(...a.filter((E)=>typeof E==="string"))}return r}function Q(e){return e.toLowerCase().trim().replace(/[^a-z0-9._:/@-]+/g," ")}function W(e,t,r){let i=Q(e),a=Q(t),E=Q(r);if(!i)return 0;if(a===i)return 1000;if(a.startsWith(i))return 800-Math.min(100,a.length-i.length);if(a.includes(i))return 650-Math.min(100,a.indexOf(i));let T=i.split(/\s+/).filter(Boolean);if(T.every((c)=>E.includes(c)))return 400+T.length*10;let s=0;for(let c of i){if(s=E.indexOf(c,s),s<0)return 0;s++}return Math.max(1,180-Math.floor(E.length/20))}function Ce(e,t){let r=e.kind.toLowerCase();if(r==="server"||r==="compute")return{type:"server",href:`/server/metrics?env=${encodeURIComponent(t)}`};if(r.includes("database")||["mysql","postgres","postgresql","sqlite","redis"].includes(r))return{type:"database",href:`/server/database?env=${encodeURIComponent(t)}&database=${encodeURIComponent(e.slug)}`};return{type:"service",href:`/server/sites?env=${encodeURIComponent(t)}&service=${encodeURIComponent(e.slug)}`}}function Cs(e,t){let r=e.getProject(t.projectId);if(!r)return[];let i=e.listEnvironments(r.id),a=new Map(i.map((n)=>[n.id,n])),E=e.listResourceTags(r.id),T=new Map;for(let n of E){let L=T.get(n.resourceId)??[];L.push({id:n.tag.id,name:n.tag.name,color:n.tag.color}),T.set(n.resourceId,L)}let s=[],c=t.allowedResourceSlugs!==void 0;if(!c){s.push({type:"project",id:r.id,title:r.name,subtitle:r.slug,href:`/?project=${encodeURIComponent(r.slug)}`,tags:[],score:0});for(let n of i)s.push({type:"environment",id:n.id,title:n.name,subtitle:`${r.name} · ${n.kind}`,href:`/?env=${encodeURIComponent(n.slug)}`,environment:n.slug,tags:[],score:0})}let V=e.listResources(r.id).filter((n)=>!t.allowedResourceSlugs||t.allowedResourceSlugs.has(n.slug));for(let n of V){let L=n.environmentId?a.get(n.environmentId):void 0,C=T.get(n.id)??[],U=ne(n.desiredState,pe),m=[n.name,n.slug,n.kind,n.provider,n.providerId,L?.slug,...U,...C.map((Ee)=>Ee.name)].filter(Boolean).join(" "),X=Ce(n,L?.slug??i[0]?.slug??"");s.push({type:X.type,id:n.id,title:n.name,subtitle:[n.kind,...U.slice(0,2)].join(" · "),href:X.href,environment:L?.slug,provider:n.provider,tags:C,score:W(t.query,n.name,m)})}if(!c)for(let n of e.listOperations({projectId:r.id,limit:500})){let L=n.environmentId?a.get(n.environmentId):void 0,C=ne(n.input,ue),U=n.kind.includes("deploy"),m=C[0]??n.kind,X=[n.kind,n.id,n.correlationId,n.state,...C].join(" ");s.push({type:U?"deployment":"operation",id:n.id,title:m,subtitle:`${n.kind} · ${n.state}`,href:`/server/activity?env=${encodeURIComponent(L?.slug??i[0]?.slug??"")}&operation=${encodeURIComponent(n.id)}`,environment:L?.slug,status:n.state,tags:[],score:W(t.query,m,X)})}for(let n of s)if(n.score===0)n.score=W(t.query,n.title,`${n.title} ${n.subtitle} ${n.environment??""} ${n.provider??""}`);let J={service:0,server:1,database:2,deployment:3,environment:4,project:5,operation:6};return s.filter((n)=>n.score>0).sort((n,L)=>L.score-n.score||J[n.type]-J[L.type]||n.title.localeCompare(L.title)||n.id.localeCompare(L.id)).slice(0,Math.min(50,Math.max(1,t.limit??20)))}export{ie,
|
|
1507
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.sequence,i.id,i.organizationId??null,i.projectId??null,i.operationId??null,i.resourceId??null,i.actorId??null,i.correlationId,i.type,i.level,N(i.payload),i.createdAt]);for(let[i,a]of Object.entries(e.settings))o(this.database,"INSERT INTO settings (key, value, updated_at) VALUES (?, ?, ?)",[i,N(a),this.now()]);for(let i of e.tags??[])o(this.database,"INSERT INTO tags (id, project_id, name, normalized_name, color, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)",[i.id,i.projectId,i.name,i.normalizedName,i.color,i.createdAt,i.updatedAt]);for(let i of e.resourceTags??[])o(this.database,"INSERT INTO resource_tags (resource_id, tag_id, created_at) VALUES (?, ?, ?)",[i.resourceId,i.tagId,i.createdAt]);for(let i of e.savedFilters??[])o(this.database,"INSERT INTO saved_filters (id, actor_key, name, route_id, query, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)",[i.id,i.actorKey,i.name,i.routeId,N(i.query),i.createdAt,i.updatedAt]);for(let i of e.navigationItems??[])o(this.database,"INSERT INTO navigation_items (actor_key, entity_type, entity_id, favorite, last_visited_at, visit_count) VALUES (?, ?, ?, ?, ?, ?)",[i.actorKey,i.entityType,i.entityId,i.favorite?1:0,i.lastVisitedAt,i.visitCount])})}}var pe=new Set(["domain","domains","hostname","hostnames","url","repository","repo","image","label","labels"]),ue=new Set(["sha","commit","commitsha","release","releaseid"]);function ne(e,t){if(!e||typeof e!=="object"||Array.isArray(e))return[];let r=[];for(let[i,a]of Object.entries(e)){if(!t.has(i.toLowerCase()))continue;if(typeof a==="string")r.push(a);else if(Array.isArray(a))r.push(...a.filter((E)=>typeof E==="string"))}return r}function Q(e){return e.toLowerCase().trim().replace(/[^a-z0-9._:/@-]+/g," ")}function W(e,t,r){let i=Q(e),a=Q(t),E=Q(r);if(!i)return 0;if(a===i)return 1000;if(a.startsWith(i))return 800-Math.min(100,a.length-i.length);if(a.includes(i))return 650-Math.min(100,a.indexOf(i));let T=i.split(/\s+/).filter(Boolean);if(T.every((c)=>E.includes(c)))return 400+T.length*10;let s=0;for(let c of i){if(s=E.indexOf(c,s),s<0)return 0;s++}return Math.max(1,180-Math.floor(E.length/20))}function Ce(e,t){let r=e.kind.toLowerCase();if(r==="server"||r==="compute")return{type:"server",href:`/server/metrics?env=${encodeURIComponent(t)}`};if(r.includes("database")||["mysql","postgres","postgresql","sqlite","redis"].includes(r))return{type:"database",href:`/server/database?env=${encodeURIComponent(t)}&database=${encodeURIComponent(e.slug)}`};return{type:"service",href:`/server/sites?env=${encodeURIComponent(t)}&service=${encodeURIComponent(e.slug)}`}}function Cs(e,t){let r=e.getProject(t.projectId);if(!r)return[];let i=e.listEnvironments(r.id),a=new Map(i.map((n)=>[n.id,n])),E=e.listResourceTags(r.id),T=new Map;for(let n of E){let L=T.get(n.resourceId)??[];L.push({id:n.tag.id,name:n.tag.name,color:n.tag.color}),T.set(n.resourceId,L)}let s=[],c=t.allowedResourceSlugs!==void 0;if(!c){s.push({type:"project",id:r.id,title:r.name,subtitle:r.slug,href:`/?project=${encodeURIComponent(r.slug)}`,tags:[],score:0});for(let n of i)s.push({type:"environment",id:n.id,title:n.name,subtitle:`${r.name} · ${n.kind}`,href:`/?env=${encodeURIComponent(n.slug)}`,environment:n.slug,tags:[],score:0})}let V=e.listResources(r.id).filter((n)=>!t.allowedResourceSlugs||t.allowedResourceSlugs.has(n.slug));for(let n of V){let L=n.environmentId?a.get(n.environmentId):void 0,C=T.get(n.id)??[],U=ne(n.desiredState,pe),m=[n.name,n.slug,n.kind,n.provider,n.providerId,L?.slug,...U,...C.map((Ee)=>Ee.name)].filter(Boolean).join(" "),X=Ce(n,L?.slug??i[0]?.slug??"");s.push({type:X.type,id:n.id,title:n.name,subtitle:[n.kind,...U.slice(0,2)].join(" · "),href:X.href,environment:L?.slug,provider:n.provider,tags:C,score:W(t.query,n.name,m)})}if(!c)for(let n of e.listOperations({projectId:r.id,limit:500})){let L=n.environmentId?a.get(n.environmentId):void 0,C=ne(n.input,ue),U=n.kind.includes("deploy"),m=C[0]??n.kind,X=[n.kind,n.id,n.correlationId,n.state,...C].join(" ");s.push({type:U?"deployment":"operation",id:n.id,title:m,subtitle:`${n.kind} · ${n.state}`,href:`/server/activity?env=${encodeURIComponent(L?.slug??i[0]?.slug??"")}&operation=${encodeURIComponent(n.id)}`,environment:L?.slug,status:n.state,tags:[],score:W(t.query,m,X)})}for(let n of s)if(n.score===0)n.score=W(t.query,n.title,`${n.title} ${n.subtitle} ${n.environment??""} ${n.provider??""}`);let J={service:0,server:1,database:2,deployment:3,environment:4,project:5,operation:6};return s.filter((n)=>n.score>0).sort((n,L)=>L.score-n.score||J[n.type]-J[L.type]||n.title.localeCompare(L.title)||n.id.localeCompare(L.id)).slice(0,Math.min(50,Math.max(1,t.limit??20)))}export{ie,Zr,Z,en,h,Tr,Cs};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Qn}from"./chunk-yx1qgp1q.js";import"./chunk-dhxwmkhz.js";import"./chunk-r1vtnn8w.js";import"./chunk-4zbnwt9b.js";import"./chunk-vymg9ywg.js";import"./chunk-80zkjpfz.js";import"./chunk-77qpn2m8.js";import"./chunk-bckm6fre.js";import"./chunk-8tbj9h2a.js";export{Qn as resolveDashboardData};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ti}from"./chunk-kc2e193t.js";import"./chunk-7a7n6p2m.js";import"./chunk-n7eq4t9a.js";import"./chunk-n8cwx54p.js";import"./chunk-vymg9ywg.js";import"./chunk-80zkjpfz.js";import"./chunk-bckm6fre.js";import"./chunk-8tbj9h2a.js";export{ti as resolveServerDashboardData};
|