package licensing import ( "context" "net/http" "github.com/SigNoz/signoz/pkg/errors" "github.com/SigNoz/signoz/pkg/factory" "github.com/SigNoz/signoz/pkg/types/featuretypes" "github.com/SigNoz/signoz/pkg/types/licensetypes" "github.com/SigNoz/signoz/pkg/valuer" ) var ( ErrCodeUnsupported = errors.MustNewCode("licensing_unsupported") ErrCodeFeatureUnavailable = errors.MustNewCode("feature_unavailable") ) type Licensing interface { factory.Service // Validate validates the license with the upstream server Validate(ctx context.Context) error // Activate validates and enables the license Activate(ctx context.Context, organizationID valuer.UUID, key string) error // GetActive fetches the current active license in org GetActive(ctx context.Context, organizationID valuer.UUID) (*licensetypes.License, error) // Refresh refreshes the license state from upstream server Refresh(ctx context.Context, organizationID valuer.UUID) error // Checkout creates a checkout session via upstream server and returns the redirection link Checkout(ctx context.Context, organizationID valuer.UUID, postableSubscription *licensetypes.PostableSubscription) (*licensetypes.GettableSubscription, error) // Portal creates a portal session via upstream server and return the redirection link Portal(ctx context.Context, organizationID valuer.UUID, postableSubscription *licensetypes.PostableSubscription) (*licensetypes.GettableSubscription, error) // feature surrogate // CheckFeature checks if the feature is active or not CheckFeature(ctx context.Context, key string) error // GetFeatureFlags fetches all the defined feature flags GetFeatureFlag(ctx context.Context, key string) (*featuretypes.GettableFeature, error) // GetFeatureFlags fetches all the defined feature flags GetFeatureFlags(ctx context.Context) ([]*featuretypes.GettableFeature, error) // InitFeatures initialises the feature flags InitFeatures(ctx context.Context, features []*featuretypes.GettableFeature) error // UpdateFeatureFlag updates the feature flag UpdateFeatureFlag(ctx context.Context, feature *featuretypes.GettableFeature) error } type API interface { Activate(http.ResponseWriter, *http.Request) Refresh(http.ResponseWriter, *http.Request) GetActive(http.ResponseWriter, *http.Request) Checkout(http.ResponseWriter, *http.Request) Portal(http.ResponseWriter, *http.Request) }