package proxy import "context" // RouteOptions holds optional configuration for a proxy route. type RouteOptions struct { SSLCertificateID int AccessListID int // NPM access list ID for authentication, 0 = public ForwardScheme string // "http" or "https", defaults to "http" } // Provider is the interface for proxy route management. // Implementations handle the specifics of each proxy system (NPM, Traefik, etc.). // The "None" provider implements all methods as no-ops. type Provider interface { // Name returns the provider identifier (e.g., "npm", "traefik", "none"). Name() string // ConfigureRoute creates or updates a proxy route for the given domain. // Returns a route ID string that can be used for updates and deletes. // For NPM, the route ID is the proxy host ID (stringified). // For Traefik, the route ID is the router name. // For None, returns empty string. ConfigureRoute(ctx context.Context, domain, targetHost string, targetPort int, opts RouteOptions) (routeID string, err error) // DeleteRoute removes a proxy route by its route ID. // Does nothing if routeID is empty. DeleteRoute(ctx context.Context, routeID string) error // ContainerLabels returns Docker labels to set on containers at creation time. // Traefik uses labels for auto-discovery; NPM and None return nil. ContainerLabels(domain string, port int) map[string]string // Ping checks connectivity to the proxy backend. // Returns nil if healthy or if the provider doesn't need external connectivity (None). Ping(ctx context.Context) error }