@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.
Files changed (130) hide show
  1. package/dist/aws/index.js +1 -1
  2. package/dist/bin/chunk-4w80w3sm.js +1 -0
  3. package/dist/bin/{chunk-wvhqjr80.js → chunk-5tsxt28g.js} +2 -2
  4. package/dist/bin/{chunk-7h6h8yxm.js → chunk-77qpn2m8.js} +3 -3
  5. package/dist/bin/{chunk-13dhcjjb.js → chunk-7xvm2ygt.js} +2 -2
  6. package/dist/bin/{chunk-6xw0r4gn.js → chunk-8tbj9h2a.js} +35 -35
  7. package/dist/bin/chunk-971tfc6m.js +1 -0
  8. package/dist/bin/{chunk-6zk2n3wk.js → chunk-9e22a51n.js} +42 -42
  9. package/dist/bin/{chunk-z2ez8wn9.js → chunk-9k60q9qz.js} +3 -3
  10. package/dist/bin/{chunk-5gehfky4.js → chunk-a929za72.js} +2 -2
  11. package/dist/bin/{chunk-w7k5rvmw.js → chunk-dpw8x3sr.js} +1 -1
  12. package/dist/bin/{chunk-84tvv3x1.js → chunk-ejqhbj1h.js} +1 -1
  13. package/dist/bin/{chunk-gj5jkhfr.js → chunk-gd4w6bht.js} +3 -3
  14. package/dist/bin/chunk-h785hw6a.js +1 -0
  15. package/dist/bin/chunk-jyggrdh2.js +1 -0
  16. package/dist/bin/{chunk-1fj5gk6r.js → chunk-kc2e193t.js} +59 -59
  17. package/dist/bin/{chunk-bnv8yd9w.js → chunk-n7eq4t9a.js} +3 -3
  18. package/dist/bin/{chunk-d5qhwtkg.js → chunk-n8cwx54p.js} +5 -5
  19. package/dist/bin/{chunk-d7r6mhyv.js → chunk-ng0949x3.js} +2 -2
  20. package/dist/bin/{chunk-p9hd27k4.js → chunk-pcyywgx7.js} +1 -1
  21. package/dist/bin/{chunk-55kmbzr5.js → chunk-pt2bz3kr.js} +1 -1
  22. package/dist/bin/{chunk-96xtj5j6.js → chunk-q524s7cx.js} +1 -1
  23. package/dist/bin/{chunk-dh2qmxw9.js → chunk-q9gpw6wv.js} +1 -1
  24. package/dist/bin/{chunk-x5x9dzk7.js → chunk-r1vtnn8w.js} +2 -2
  25. package/dist/bin/{chunk-jh1593zx.js → chunk-r1w08y38.js} +1 -1
  26. package/dist/bin/{chunk-nnkhrm4n.js → chunk-raj6j2j5.js} +2 -2
  27. package/dist/bin/{chunk-2hpnd4g4.js → chunk-s1j941z1.js} +1 -1
  28. package/dist/bin/{chunk-ymbwekjm.js → chunk-sdwr2tnp.js} +1 -1
  29. package/dist/bin/{chunk-9jfjzycs.js → chunk-swete552.js} +10 -10
  30. package/dist/bin/{chunk-yn34zgr2.js → chunk-v78r5tx0.js} +1 -1
  31. package/dist/bin/chunk-v7f4c62s.js +1 -0
  32. package/dist/bin/{chunk-jcyrm5q0.js → chunk-vesvsvdy.js} +1 -1
  33. package/dist/bin/{chunk-yt8rgkqt.js → chunk-w5hzt11d.js} +2 -2
  34. package/dist/bin/{chunk-12e9v1dw.js → chunk-x42gb7pq.js} +1 -1
  35. package/dist/bin/{chunk-0vsxpmfj.js → chunk-yx1qgp1q.js} +2 -2
  36. package/dist/bin/{chunk-xgepx8yx.js → chunk-zzsdhhmb.js} +1 -1
  37. package/dist/bin/cli.js +152 -152
  38. package/dist/bin/dashboard-server.js +1 -1
  39. package/dist/{chunk-7ww65b66.js → chunk-2knc1zyy.js} +100 -100
  40. package/dist/{chunk-tnjae324.js → chunk-678rwkz8.js} +75 -75
  41. package/dist/{chunk-emg3shmb.js → chunk-6t9tjvpy.js} +2 -2
  42. package/dist/{chunk-g8fpsdyq.js → chunk-6znnde1s.js} +4 -4
  43. package/dist/{chunk-edqhhcg9.js → chunk-83p688yv.js} +3 -3
  44. package/dist/{chunk-zmyv76f0.js → chunk-88nxsyry.js} +6 -6
  45. package/dist/{chunk-sct6mdgc.js → chunk-a6k322xc.js} +25 -25
  46. package/dist/chunk-atny1wp9.js +1 -0
  47. package/dist/{chunk-thpce63q.js → chunk-cy6qh4ea.js} +2 -2
  48. package/dist/{chunk-wpqj98h8.js → chunk-g9mnmddy.js} +2 -2
  49. package/dist/{chunk-9c29rnk3.js → chunk-gd9g0v9w.js} +8 -8
  50. package/dist/chunk-hn2v0b0d.js +1 -0
  51. package/dist/{chunk-e0919h5g.js → chunk-hnkw6pde.js} +2 -2
  52. package/dist/{chunk-1kp3y2s7.js → chunk-hw3p6pth.js} +1 -1
  53. package/dist/{chunk-1n3ckctd.js → chunk-jvqcw0b4.js} +48 -48
  54. package/dist/{chunk-13d54txj.js → chunk-qzwack6w.js} +2 -2
  55. package/dist/{chunk-e7ds04wb.js → chunk-rbem58rx.js} +1 -1
  56. package/dist/chunk-v46b25w9.js +1 -0
  57. package/dist/{chunk-3qp10j0j.js → chunk-w495x89g.js} +3 -3
  58. package/dist/{chunk-ej4sm2tw.js → chunk-x07tpsv0.js} +5 -5
  59. package/dist/{chunk-3kapcdpn.js → chunk-yq3pdbz7.js} +1 -1
  60. package/dist/deploy/index.js +1 -1
  61. package/dist/dns/index.js +1 -1
  62. package/dist/drivers/index.js +1 -1
  63. package/dist/index.d.ts +1 -1
  64. package/dist/index.js +47 -47
  65. package/dist/operations/index.js +1 -1
  66. package/dist/protection/index.js +1 -1
  67. package/dist/spend/index.js +1 -1
  68. package/dist/ui/404.html +1 -1
  69. package/dist/ui/accept-invitation.html +1 -1
  70. package/dist/ui/access-denied.html +1 -1
  71. package/dist/ui/account/automation.html +6 -6
  72. package/dist/ui/account/security.html +2 -2
  73. package/dist/ui/applications/compose.html +6 -6
  74. package/dist/ui/applications/new.html +2 -2
  75. package/dist/ui/data/backups.html +6 -6
  76. package/dist/ui/data/services.html +5 -5
  77. package/dist/ui/data/volumes.html +6 -6
  78. package/dist/ui/index.html +6 -6
  79. package/dist/ui/infrastructure/topology.html +6 -6
  80. package/dist/ui/integrations.html +1 -1
  81. package/dist/ui/operations/alerts.html +6 -6
  82. package/dist/ui/operations/configuration.html +6 -6
  83. package/dist/ui/operations/jobs.html +6 -6
  84. package/dist/ui/operations/maintenance.html +5 -5
  85. package/dist/ui/operations/observability.html +5 -5
  86. package/dist/ui/operations/previews.html +6 -6
  87. package/dist/ui/operations/queue.html +6 -6
  88. package/dist/ui/operations/regions.html +5 -5
  89. package/dist/ui/operations/releases.html +6 -6
  90. package/dist/ui/operations/spend.html +6 -6
  91. package/dist/ui/operations/workloads.html +6 -6
  92. package/dist/ui/security.html +1 -1
  93. package/dist/ui/server/actions.html +5 -5
  94. package/dist/ui/server/activity.html +2 -2
  95. package/dist/ui/server/capacity.html +5 -5
  96. package/dist/ui/server/database.html +6 -6
  97. package/dist/ui/server/deployments.html +6 -6
  98. package/dist/ui/server/diagnostics.html +2 -2
  99. package/dist/ui/server/firewall.html +6 -6
  100. package/dist/ui/server/fleet.html +6 -6
  101. package/dist/ui/server/logs.html +5 -5
  102. package/dist/ui/server/metrics.html +6 -6
  103. package/dist/ui/server/security.html +1 -1
  104. package/dist/ui/server/services.html +1 -1
  105. package/dist/ui/server/sites.html +6 -6
  106. package/dist/ui/server/ssh-keys.html +6 -6
  107. package/dist/ui/server/team.html +6 -6
  108. package/dist/ui/server/terminal.html +2 -2
  109. package/dist/ui/serverless/alarms.html +6 -6
  110. package/dist/ui/serverless/assets.html +2 -2
  111. package/dist/ui/serverless/cost.html +2 -2
  112. package/dist/ui/serverless/data.html +5 -5
  113. package/dist/ui/serverless/deployments.html +1 -1
  114. package/dist/ui/serverless/firewall.html +2 -2
  115. package/dist/ui/serverless/functions.html +5 -5
  116. package/dist/ui/serverless/logs.html +6 -6
  117. package/dist/ui/serverless/metrics.html +2 -2
  118. package/dist/ui/serverless/queues.html +6 -6
  119. package/dist/ui/serverless/secrets.html +6 -6
  120. package/dist/ui/serverless/traces.html +6 -6
  121. package/dist/ui/serverless.html +5 -5
  122. package/package.json +3 -3
  123. package/dist/bin/chunk-de88yqwy.js +0 -1
  124. package/dist/bin/chunk-p36ns96s.js +0 -1
  125. package/dist/bin/chunk-qz3za76g.js +0 -1
  126. package/dist/bin/chunk-rxwecjgc.js +0 -1
  127. package/dist/bin/chunk-xaafj6kf.js +0 -1
  128. package/dist/chunk-7by4rm7y.js +0 -1
  129. package/dist/chunk-n688m5fp.js +0 -1
  130. 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 We(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 ${We(c)}"`];if(n.methods?.length)u.push(` "chain,id:${s},phase:1,pass,nolog,setvar:'tx.ts_cloud_ratelimit=${We(n.id)}'"`);else u.push(` "id:${s},phase:1,pass,nolog,setvar:'tx.ts_cloud_ratelimit=${We(n.id)}'"`);if(t.push(`# Marks requests governed by the ts-cloud rate limit "${We(n.id)}".`),t.push(u.join(" \\\n")),n.methods?.length)t.push(` SecRule REQUEST_METHOD "@within ${We(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(`
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 ${We(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 ${We(a)}. Every bypass is an unguarded route.`,`SecRule REQUEST_URI "@rx ${We(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(`# ${We(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 ${We(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(`
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{We,us,Oa,ri,ps,_u};
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{Xr,Va};
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-13dhcjjb.js";import"./chunk-wvhqjr80.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
+ 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-6xw0r4gn.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 Yr(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(Yr(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 Zr(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:`
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 Yr(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)
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,Yr,Z,Zr,h,Tr,Cs};
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};