package apiroutes import "net/http" type Handlers struct { Healthz http.HandlerFunc EventsStream http.HandlerFunc GetStatus http.HandlerFunc VPNLoginState http.HandlerFunc SystemdState http.HandlerFunc RoutesServiceStart http.HandlerFunc RoutesServiceStop http.HandlerFunc RoutesServiceRestart http.HandlerFunc RoutesService http.HandlerFunc RoutesUpdate http.HandlerFunc RoutesTimer http.HandlerFunc RoutesTimerToggle http.HandlerFunc RoutesRollback http.HandlerFunc RoutesClear http.HandlerFunc RoutesCacheRestore http.HandlerFunc RoutesPrecheckDebug http.HandlerFunc RoutesFixPolicyRoute http.HandlerFunc RoutesFixPolicyAlias http.HandlerFunc TrafficMode http.HandlerFunc TrafficModeTest http.HandlerFunc TrafficAdvancedReset http.HandlerFunc TrafficInterfaces http.HandlerFunc TrafficCandidates http.HandlerFunc TrafficAppMarks http.HandlerFunc TrafficAppMarksItems http.HandlerFunc TrafficAppProfiles http.HandlerFunc TrafficAudit http.HandlerFunc TransportClients http.HandlerFunc TransportClientByID http.HandlerFunc TransportInterfaces http.HandlerFunc TransportRuntimeObservability http.HandlerFunc TransportPolicies http.HandlerFunc TransportPoliciesValidate http.HandlerFunc TransportPoliciesApply http.HandlerFunc TransportPoliciesRollback http.HandlerFunc TransportConflicts http.HandlerFunc TransportOwnership http.HandlerFunc TransportOwnerLocks http.HandlerFunc TransportOwnerLocksClear http.HandlerFunc TransportCapabilities http.HandlerFunc TransportHealthRefresh http.HandlerFunc TransportNetnsToggle http.HandlerFunc TransportSingBoxProfiles http.HandlerFunc TransportSingBoxProfileByID http.HandlerFunc TransportSingBoxFeatures http.HandlerFunc EgressIdentityGet http.HandlerFunc EgressIdentityRefresh http.HandlerFunc TraceTailPlain http.HandlerFunc TraceJSON http.HandlerFunc TraceAppend http.HandlerFunc DNSUpstreams http.HandlerFunc DNSUpstreamPool http.HandlerFunc DNSStatus http.HandlerFunc DNSModeSet http.HandlerFunc DNSBenchmark http.HandlerFunc DNSSmartdnsService http.HandlerFunc SmartdnsService http.HandlerFunc SmartdnsRuntime http.HandlerFunc SmartdnsPrewarm http.HandlerFunc SmartdnsWildcards http.HandlerFunc DomainsTable http.HandlerFunc DomainsFile http.HandlerFunc VPNAutoloopStatus http.HandlerFunc VPNStatus http.HandlerFunc VPNAutoconnect http.HandlerFunc VPNListLocations http.HandlerFunc VPNSetLocation http.HandlerFunc VPNLoginSessionStart http.HandlerFunc VPNLoginSessionState http.HandlerFunc VPNLoginSessionAction http.HandlerFunc VPNLoginSessionStop http.HandlerFunc VPNLogout http.HandlerFunc } func Register(mux *http.ServeMux, h Handlers) { registerCoreRoutes(mux, h) registerRoutesControlRoutes(mux, h) registerTrafficRoutes(mux, h) registerTransportRoutes(mux, h) registerTraceRoutes(mux, h) registerDNSRoutes(mux, h) registerSmartDNSRoutes(mux, h) registerDomainsRoutes(mux, h) registerVPNRoutes(mux, h) } func registerCoreRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/healthz", h.Healthz) mux.HandleFunc("/api/v1/events/stream", h.EventsStream) mux.HandleFunc("/api/v1/status", h.GetStatus) mux.HandleFunc("/api/v1/routes/status", h.GetStatus) mux.HandleFunc("/api/v1/vpn/login-state", h.VPNLoginState) mux.HandleFunc("/api/v1/systemd/state", h.SystemdState) } func registerRoutesControlRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/routes/service/start", h.RoutesServiceStart) mux.HandleFunc("/api/v1/routes/service/stop", h.RoutesServiceStop) mux.HandleFunc("/api/v1/routes/service/restart", h.RoutesServiceRestart) mux.HandleFunc("/api/v1/routes/service", h.RoutesService) mux.HandleFunc("/api/v1/routes/update", h.RoutesUpdate) mux.HandleFunc("/api/v1/routes/timer", h.RoutesTimer) mux.HandleFunc("/api/v1/routes/timer/toggle", h.RoutesTimerToggle) mux.HandleFunc("/api/v1/routes/rollback", h.RoutesRollback) mux.HandleFunc("/api/v1/routes/clear", h.RoutesClear) mux.HandleFunc("/api/v1/routes/cache/restore", h.RoutesCacheRestore) mux.HandleFunc("/api/v1/routes/precheck/debug", h.RoutesPrecheckDebug) mux.HandleFunc("/api/v1/routes/fix-policy-route", h.RoutesFixPolicyRoute) mux.HandleFunc("/api/v1/routes/fix-policy", h.RoutesFixPolicyAlias) } func registerTrafficRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/traffic/mode", h.TrafficMode) mux.HandleFunc("/api/v1/traffic/mode/test", h.TrafficModeTest) mux.HandleFunc("/api/v1/traffic/advanced/reset", h.TrafficAdvancedReset) mux.HandleFunc("/api/v1/traffic/interfaces", h.TrafficInterfaces) mux.HandleFunc("/api/v1/traffic/candidates", h.TrafficCandidates) mux.HandleFunc("/api/v1/traffic/appmarks", h.TrafficAppMarks) mux.HandleFunc("/api/v1/traffic/appmarks/items", h.TrafficAppMarksItems) mux.HandleFunc("/api/v1/traffic/app-profiles", h.TrafficAppProfiles) mux.HandleFunc("/api/v1/traffic/audit", h.TrafficAudit) } func registerTransportRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/transport/clients", h.TransportClients) mux.HandleFunc("/api/v1/transport/clients/", h.TransportClientByID) mux.HandleFunc("/api/v1/transport/interfaces", h.TransportInterfaces) mux.HandleFunc("/api/v1/transport/runtime/observability", h.TransportRuntimeObservability) mux.HandleFunc("/api/v1/transport/policies", h.TransportPolicies) mux.HandleFunc("/api/v1/transport/policies/validate", h.TransportPoliciesValidate) mux.HandleFunc("/api/v1/transport/policies/apply", h.TransportPoliciesApply) mux.HandleFunc("/api/v1/transport/policies/rollback", h.TransportPoliciesRollback) mux.HandleFunc("/api/v1/transport/conflicts", h.TransportConflicts) mux.HandleFunc("/api/v1/transport/owners", h.TransportOwnership) mux.HandleFunc("/api/v1/transport/owner-locks", h.TransportOwnerLocks) mux.HandleFunc("/api/v1/transport/owner-locks/clear", h.TransportOwnerLocksClear) mux.HandleFunc("/api/v1/transport/capabilities", h.TransportCapabilities) mux.HandleFunc("/api/v1/transport/health/refresh", h.TransportHealthRefresh) mux.HandleFunc("/api/v1/transport/netns/toggle", h.TransportNetnsToggle) mux.HandleFunc("/api/v1/transport/singbox/profiles", h.TransportSingBoxProfiles) mux.HandleFunc("/api/v1/transport/singbox/profiles/", h.TransportSingBoxProfileByID) mux.HandleFunc("/api/v1/transport/singbox/features", h.TransportSingBoxFeatures) mux.HandleFunc("/api/v1/egress/identity", h.EgressIdentityGet) mux.HandleFunc("/api/v1/egress/identity/refresh", h.EgressIdentityRefresh) } func registerTraceRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/trace", h.TraceTailPlain) mux.HandleFunc("/api/v1/trace-json", h.TraceJSON) mux.HandleFunc("/api/v1/trace/append", h.TraceAppend) } func registerDNSRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/dns-upstreams", h.DNSUpstreams) mux.HandleFunc("/api/v1/dns/upstream-pool", h.DNSUpstreamPool) mux.HandleFunc("/api/v1/dns/status", h.DNSStatus) mux.HandleFunc("/api/v1/dns/mode", h.DNSModeSet) mux.HandleFunc("/api/v1/dns/benchmark", h.DNSBenchmark) mux.HandleFunc("/api/v1/dns/smartdns-service", h.DNSSmartdnsService) } func registerSmartDNSRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/smartdns/service", h.SmartdnsService) mux.HandleFunc("/api/v1/smartdns/runtime", h.SmartdnsRuntime) mux.HandleFunc("/api/v1/smartdns/prewarm", h.SmartdnsPrewarm) mux.HandleFunc("/api/v1/smartdns/wildcards", h.SmartdnsWildcards) } func registerDomainsRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/domains/table", h.DomainsTable) mux.HandleFunc("/api/v1/domains/file", h.DomainsFile) } func registerVPNRoutes(mux *http.ServeMux, h Handlers) { mux.HandleFunc("/api/v1/vpn/autoloop-status", h.VPNAutoloopStatus) mux.HandleFunc("/api/v1/vpn/status", h.VPNStatus) mux.HandleFunc("/api/v1/vpn/autoconnect", h.VPNAutoconnect) mux.HandleFunc("/api/v1/vpn/locations", h.VPNListLocations) mux.HandleFunc("/api/v1/vpn/location", h.VPNSetLocation) mux.HandleFunc("/api/v1/vpn/login/session/start", h.VPNLoginSessionStart) mux.HandleFunc("/api/v1/vpn/login/session/state", h.VPNLoginSessionState) mux.HandleFunc("/api/v1/vpn/login/session/action", h.VPNLoginSessionAction) mux.HandleFunc("/api/v1/vpn/login/session/stop", h.VPNLoginSessionStop) mux.HandleFunc("/api/v1/vpn/logout", h.VPNLogout) }