1import{f as o,k as c,l as V,n as B,b as A,r as C,j as e,B as D}from"./index-BRXndiYS.js";import{P as F,T as Q}from"./AppRoutes-BgC7a4hX.js";import"./featureCatalog-mJP1-0oH.js";const n={all:["admin","network-topology"],status:s=>[...n.all,"status",s],topologies:s=>[...n.all,"topologies",s],topology:(s,a)=>[...n.all,"topology",s,a],pathPolicies:s=>[...n.all,"path-policies",s],trustBoundaries:s=>[...n.all,"trust-boundaries",s],validations:s=>[...n.all,"validations",s]};async function K(s){return(await o.get(`/orgs/${s}/network-topology/status`)).data}async function L(s){const a=await o.get(`/orgs/${s}/network-topology/topologies`);return{topologies:a.data.items??[],total:a.data.total}}async function U(s){const a=await o.get(`/orgs/${s}/network-topology/policies`);return{policies:a.data.items??[],total:a.data.total}}async function E(s){const a=await o.get(`/orgs/${s}/network-topology/trust-boundaries`);return{boundaries:a.data.items??[],total:a.data.total}}async function O(s,a=50){return{validations:[],total:0}}async function R(s,a){return(await o.post(`/orgs/${s}/network-topology/topologies/${a}/validate`)).data}function M(s){switch(s){case"active":return"success";case"draft":return"default";case"validating":return"warning";case"invalid":return"error";default:return"default"}}function H(s){switch(s){case"service_mesh":return"Service Mesh";case"data_flow":return"Data Flow";case"trust_hierarchy":return"Trust Hierarchy";case"access_control":return"Access Control";default:return s.replace(/_/g," ").replace(/\b\w/g,a=>a.toUpperCase())}}function Y(s){switch(s){case"allow":return"Allow";case"deny":return"Deny";case"audit":return"Audit";case"require_approval":return"Require Approval";default:return s.replace(/_/g," ").replace(/\b\w/g,a=>a.toUpperCase())}}function z(s){switch(s){case"allow":return"success";case"deny":return"error";case"audit":return"default";case"require_approval":return"warning";default:return"default"}}function G(s){switch(s){case"passed":return"success";case"failed":return"error";case"warnings":return"warning";case"pending":return"default";default:return"default"}}function W(s){return c({queryKey:n.status(s),queryFn:()=>K(s),enabled:!!s,staleTime:3e4})}function J(s){return c({queryKey:n.topologies(s),queryFn:()=>L(s),enabled:!!s,staleTime:3e4})}function X(s){return c({queryKey:n.pathPolicies(s),queryFn:()=>U(s),enabled:!!s,staleTime:3e4})}function Z(s){return c({queryKey:n.trustBoundaries(s),queryFn:()=>E(s),enabled:!!s,staleTime:3e4})}function I(s,a=50){return c({queryKey:[...n.validations(s),a],queryFn:()=>O(s,a),enabled:!!s,staleTime:3e4})}function ee(s){const a=V();return B({mutationFn:r=>R(s,r),onSuccess:()=>{a.invalidateQueries({queryKey:n.topologies(s)}),a.invalidateQueries({queryKey:n.validations(s)}),a.invalidateQueries({queryKey:n.status(s)})}})}function ne(){var g,y,m,_,f,b,v,w,T,N,P,k,q;const{user:s}=A(),r=s!=null&&s.org_id&&s.org_id!=="00000000-0000-0000-0000-000000000000"?s.org_id:null,[d,S]=C.useState("status"),i=W(r),h=J(r),x=X(r),j=Z(r),p=I(r),l=ee(r);return e.jsxs("div",{className:"network-topology-page",children:[e.jsx(F,{title:"Network Topology",description:"Network topology governance and trust boundary management",actions:i.data&&e.jsxs("div",{className:"network-topology-summary",children:[e.jsxs("span",{children:[i.data.topology_count," Topologies"]}),e.jsxs("span",{children:[i.data.trust_boundary_policy_count," Boundaries"]}),e.jsx("span",{className:`badge badge--${i.data.enabled?"success":"warning"}`,children:i.data.enabled?"Active":"Disabled"})]})}),e.jsx(Q,{tabs:[{id:"status",label:"Status"},{id:"topologies",label:"Topologies"},{id:"path-policies",label:"Path Policies"},{id:"trust-boundaries",label:"Trust Boundaries"},{id:"validations",label:"Validations"}],activeTab:d,onTabChange:t=>S(t),className:"network-topology-tabs"}),e.jsxs("div",{className:"network-topology-content",children:[d==="status"&&i.data&&e.jsxs("div",{className:"status-grid",children:[e.jsxs("div",{className:"status-card",children:[e.jsx("h3",{children:"Registry Counts"}),e.jsxs("ul",{children:[e.jsxs("li",{children:["Topologies: ",i.data.topology_count]}),e.jsxs("li",{children:["Path Policies: ",i.data.policy_count]}),e.jsxs("li",{children:["Trust Boundaries: ",i.data.trust_boundary_policy_count]})]})]}),e.jsxs("div",{className:"status-card",children:[e.jsx("h3",{children:"Feature Flags"}),e.jsxs("ul",{children:[e.jsxs("li",{children:["Topology: ",(g=i.data.features)!=null&&g.network_topology_enabled?"On":"Off"]}),e.jsxs("li",{children:["Trust Boundary: ",(y=i.data.features)!=null&&y.trust_boundary_enabled?"On":"Off"]}),e.jsxs("li",{children:["Execution Graph: ",(m=i.data.features)!=null&&m.execution_graph_recording?"On":"Off"]})]})]})]}),d==="topologies"&&h.data&&e.jsxs("table",{className:"data-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Topology Name"}),e.jsx("th",{children:"Type"}),e.jsx("th",{children:"Status"}),e.jsx("th",{children:"Nodes"}),e.jsx("th",{children:"Edges"}),e.jsx("th",{children:"Version"}),e.jsx("th",{children:"Updated"}),e.jsx("th",{children:"Actions"})]})}),e.jsx("tbody",{children:(_=h.data.topologies)==null?void 0:_.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:t.topology_name}),e.jsx("td",{children:H(t.topology_type)}),e.jsx("td",{children:e.jsx("span",{className:`badge badge--${M(t.status)}`,children:t.status})}),e.jsx("td",{children:t.node_count}),e.jsx("td",{children:t.edge_count}),e.jsxs("td",{children:["v",t.version]}
1),e.jsx("td",{children:new Date(t.updated_at).toLocaleString()}),e.jsx("td",{children:e.jsx(D,{variant:"secondary",size:"sm",onClick:()=>l.mutate(t.topology_id),loading:l.isPending,children:"Validate"})})]},t.topology_id))})]}),d==="path-policies"&&x.data&&e.jsxs("table",{className:"data-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Policy Name"}),e.jsx("th",{children:"Type"}),e.jsx("th",{children:"Source"}),e.jsx("th",{children:"Destination"}),e.jsx("th",{children:"Action"}),e.jsx("th",{children:"Priority"}),e.jsx("th",{children:"Enabled"})]})}),e.jsx("tbody",{children:(f=x.data.policies)==null?void 0:f.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:t.policy_name}),e.jsx("td",{children:t.policy_type}),e.jsx("td",{children:e.jsx("code",{children:t.source_node})}),e.jsx("td",{children:e.jsx("code",{children:t.destination_node})}),e.jsx("td",{children:e.jsx("span",{className:`badge badge--${z(t.action)}`,children:Y(t.action)})}),e.jsx("td",{children:t.priority}),e.jsx("td",{children:e.jsx("span",{className:`badge badge--${t.enabled?"success":"default"}`,children:t.enabled?"Yes":"No"})})]},t.policy_id))})]}),d==="trust-boundaries"&&j.data&&e.jsxs("table",{className:"data-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Boundary Name"}),e.jsx("th",{children:"Type"}),e.jsx("th",{children:"Trust Level"}),e.jsx("th",{children:"Nodes"}),e.jsx("th",{children:"Enforcement"}),e.jsx("th",{children:"Created"})]})}),e.jsx("tbody",{children:(b=j.data.boundaries)==null?void 0:b.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:t.boundary_name}),e.jsx("td",{children:t.boundary_type}),e.jsx("td",{children:e.jsx("span",{className:`trust-level trust-level--${t.trust_level>=80?"high":t.trust_level>=50?"medium":"low"}`,children:t.trust_level})}),e.jsx("td",{children:e.jsxs("div",{className:"node-list",children:[t.nodes.slice(0,3).map((u,$)=>e.jsx("code",{children:u},$)),t.nodes.length>3&&e.jsxs("span",{className:"more-nodes",children:["+",t.nodes.length-3]})]})}),e.jsx("td",{children:t.enforcement_mode}),e.jsx("td",{children:new Date(t.created_at).toLocaleString()})]},t.boundary_id))})]}),d==="validations"&&e.jsxs("div",{className:"validations-section",children:[l.data&&e.jsxs("div",{className:`validation-result validation-result--${l.data.valid?"success":"error"}`,children:[e.jsx("h4",{children:"Validation Result"}),e.jsxs("ul",{children:[e.jsxs("li",{children:["Valid: ",l.data.valid?"Yes":"No"]}),e.jsxs("li",{children:["Issues: ",(w=(v=l.data)==null?void 0:v.issues)==null?void 0:w.length]}),e.jsxs("li",{children:["Time: ",l.data.validation_time_ms,"ms"]})]}),((N=(T=l.data)==null?void 0:T.issues)==null?void 0:N.length)>0&&e.jsxs("div",{className:"validation-issues",children:[e.jsx("h5",{children:"Issues Found:"}),e.jsx("ul",{children:(k=(P=l.data)==null?void 0:P.issues)==null?void 0:k.map((t,u)=>e.jsxs("li",{className:`issue issue--${t.severity}`,children:[e.jsxs("span",{className:"issue-type",children:["[",t.type,"]"]}),e.jsx("span",{className:"issue-message",children:t.message})]},u))})]})]}),p.data&&e.jsxs("table",{className:"data-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Validation ID"}),e.jsx("th",{children:"Type"}),e.jsx("th",{children:"Status"}),e.jsx("th",{children:"Issues"}),e.jsx("th",{children:"Warnings"}),e.jsx("th",{children:"Time"}),e.jsx("th",{children:"Created"})]})}),e.jsx("tbody",{children:(q=p.data.validations)==null?void 0:q.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsxs("code",{children:[t.validation_id.substring(0,8),"..."]})}),e.jsx("td",{children:t.validation_type}),e.jsx("td",{children:e.jsx("span",{className:`badge badge--${G(t.status)}`,children:t.status})}),e.jsx("td",{children:t.issues_found}),e.jsx("td",{children:t.warnings}),e.jsxs("td",{children:[t.validation_time_ms,"ms"]}),e.jsx("td",{children:new Date(t.created_at).toLocaleString()})]},t.validation_id))})]})]})]})]})}export{ne as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.