UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

632 lines • 16.1 kB
import type { ITagType } from '../features/tag-type/tag-type-store-type.js'; import type { LogProvider } from '../logger.js'; import type { IRole } from './stores/access-store.js'; import type { IUser } from './user.js'; import type { ALL_OPERATORS } from '../util/index.js'; import type { IProjectStats } from '../features/project/project-service.js'; import type { ProjectEnvironment } from '../features/project/project-store-type.js'; import type { IntegrationEventsService } from '../features/integration-events/integration-events-service.js'; import type { IFlagResolver } from './experimental.js'; import type { Collaborator } from '../features/feature-toggle/types/feature-collaborators-read-model-type.js'; import type { EventEmitter } from 'events'; import type { ITag } from '../tags/index.js'; import type { IFeatureLink } from '../features/feature-links/feature-links-read-model-type.js'; export type Operator = (typeof ALL_OPERATORS)[number]; export interface IConstraint { contextName: string; operator: Operator; values?: string[]; value?: string; inverted?: boolean; caseInsensitive?: boolean; } export declare enum WeightType { VARIABLE = "variable", FIX = "fix" } export interface IStrategyConfig { id?: string; name: string; featureName?: string; constraints?: IConstraint[]; variants?: IStrategyVariant[]; segments?: number[]; parameters?: { [key: string]: string; }; sortOrder?: number; milestoneId?: string; title?: string | null; disabled?: boolean | null; } export interface IFeatureStrategy { id: string; featureName: string; projectId: string; environment: string; strategyName: string; parameters: { [key: string]: string; }; sortOrder?: number; milestoneId?: string; constraints: IConstraint[]; variants?: IStrategyVariant[]; createdAt?: Date; segments?: number[]; title?: string | null; disabled?: boolean | null; } export interface FeatureToggleDTO { name: string; description?: string | null; type?: string; stale?: boolean; archived?: boolean; archivedAt?: Date; createdAt?: Date; impressionData?: boolean; variants?: IVariant[]; tags?: ITag[]; createdByUserId?: number; createdBy?: { id: number; name: string; imageUrl: string; }; } export interface FeatureToggle extends FeatureToggleDTO { project: string; lastSeenAt?: Date; createdAt?: Date; } export interface IFeatureToggleListItem extends FeatureToggle { environments?: Partial<IEnvironmentBase>[]; favorite: boolean; } export interface IFeatureToggleClient { name: string; description: string | undefined | null; type: string; project: string; stale: boolean; variants: IVariant[]; enabled: boolean; strategies: Omit<IStrategyConfig, 'disabled'>[]; dependencies?: IDependency[]; impressionData?: boolean; lastSeenAt?: Date; createdAt?: Date; tags?: ITag[]; favorite?: boolean; } export interface FeatureStrategy { name: string; title?: string | null; disabled?: boolean | null; sortOrder?: number; constraints?: IConstraint[]; variants?: IStrategyVariant[]; parameters?: { [key: string]: string; }; } export interface IFeatureEnvironmentInfo { name: string; environment: string; enabled: boolean; strategies: IFeatureStrategy[]; defaultStrategy: FeatureStrategy | undefined; } export interface FeatureToggleWithEnvironment extends FeatureToggle { environments: IEnvironmentDetail[]; } export interface FeatureToggleView extends FeatureToggleWithEnvironment { dependencies: IDependency[]; children: string[]; lifecycle: IFeatureLifecycleStage | undefined; collaborators?: { users: Collaborator[]; }; links: Omit<IFeatureLink, 'feature'>[]; } export interface IEnvironmentDetail extends IEnvironmentBase { strategies: IStrategyConfig[]; variants: IVariant[]; } export interface ISortOrder { [index: string]: number; } export interface IFeatureEnvironment { environment: string; featureName: string; enabled: boolean; lastSeenAt?: Date; variants?: IVariant[]; } export interface IVariant { name: string; weight: number; weightType: 'variable' | 'fix'; payload?: { type: 'json' | 'csv' | 'string' | 'number'; value: string; }; stickiness: string; overrides?: { contextName: string; values: string[]; }[]; } export interface IDependency { feature: string; variants?: string[]; enabled?: boolean; } export type StageName = 'initial' | 'pre-live' | 'live' | 'completed' | 'archived'; export interface IFeatureLifecycleStage { stage: StageName; enteredStageAt: Date; status?: string; } export type IProjectLifecycleStageDuration = { duration: number; project: string; stage: StageName; }; export interface IFeatureDependency { feature: string; dependency: IDependency; } export type IStrategyVariant = Omit<IVariant, 'overrides'>; export declare enum ApiTokenType { CLIENT = "client", ADMIN = "admin", FRONTEND = "frontend" } export interface IApiTokenCreate { secret: string; tokenName: string; alias?: string; type: ApiTokenType; environment: string; projects: string[]; expiresAt?: Date; } export interface IApiToken extends Omit<IApiTokenCreate, 'alias'> { createdAt: Date; seenAt?: Date; environment: string; project: string; alias?: string | null; } export interface IEnvironment { name: string; type: string; sortOrder: number; enabled: boolean; protected: boolean; projectCount?: number; apiTokenCount?: number; enabledToggleCount?: number; requiredApprovals?: number | null; } export interface IProjectEnvironment extends IEnvironment { projectApiTokenCount?: number; projectEnabledToggleCount?: number; defaultStrategy?: FeatureStrategy; } export interface IProjectsAvailableOnEnvironment extends IProjectEnvironment { visible: boolean; } export interface IEnvironmentCreate { name: string; type: string; sortOrder?: number; enabled?: boolean; requiredApprovals?: number | null; } export interface IEnvironmentClone { name: string; projects?: string[]; type: string; clonePermissions?: boolean; } export interface IEnvironmentBase { name: string; enabled: boolean; type: string; sortOrder: number; lastSeenAt: Date; } export interface IEnvironmentOverview extends IEnvironmentBase { variantCount: number; hasStrategies?: boolean; hasEnabledStrategies?: boolean; yes?: number; no?: number; } export interface IFeatureOverview { name: string; description: string; project: string; favorite: boolean; impressionData: boolean; segments: string[]; type: string; stale: boolean; createdAt: Date; lastSeenAt: Date; environments: IEnvironmentOverview[]; lifecycle?: IFeatureLifecycleStage; } export interface FeatureEnvironment { name: string; featureName?: string; environment?: string; type?: string; enabled: boolean; sortOrder?: number; variantCount: number; changeRequestIds?: number[]; milestoneName?: string; milestoneOrder?: number; totalMilestones?: number; lastSeenAt?: Date; hasStrategies?: boolean; hasEnabledStrategies?: boolean; } export interface FeatureSearchEnvironment extends FeatureEnvironment { yes: number; no: number; } export type IFeatureSearchOverview = Exclude<IFeatureOverview, 'environments'> & { dependencyType: 'parent' | 'child' | null; environments: FeatureSearchEnvironment[]; archivedAt: string; createdBy: { id: number; name: string; imageUrl: string; }; }; export interface IFeatureTypeCount { type: string; count: number; } export type ProjectMode = 'open' | 'protected' | 'private'; export interface IFeatureNaming { pattern: string | null; example?: string | null; description?: string | null; } export interface IProjectHealth { name: string; description: string; environments: ProjectEnvironment[]; features: IFeatureOverview[]; members: number; version: number; technicalDebt: number; favorite?: boolean; updatedAt?: Date; createdAt: Date | undefined; stats?: IProjectStats; mode: ProjectMode; featureLimit?: number; featureNaming?: IFeatureNaming; defaultStickiness: string; /** * @deprecated */ health: number; } export type ProjectOnboardingStatus = { status: 'onboarding-started' | 'onboarded'; } | { status: 'first-flag-created'; feature: string; }; export interface IProjectOverview { name: string; description: string; environments: ProjectEnvironment[]; featureTypeCounts: IFeatureTypeCount[]; members: number; version: number; technicalDebt: number; favorite?: boolean; updatedAt?: Date; archivedAt?: Date; createdAt: Date | undefined; stats?: IProjectStats; mode: ProjectMode; featureLimit?: number; featureNaming?: IFeatureNaming; defaultStickiness: string; onboardingStatus: ProjectOnboardingStatus; linkTemplates?: IProjectLinkTemplate[]; /** * @deprecated */ health: number; } export interface IProjectHealthReport extends IProjectHealth { staleCount: number; potentiallyStaleCount: number; activeCount: number; } export interface IProjectParam { projectId: string; } export interface IProjectLinkTemplate { title?: string; urlTemplate: string; } export interface IArchivedQuery { archived: boolean; } export interface ITagQuery { tagType: string; tagValue: string; } export interface IFeatureToggleQuery { tag?: string[][]; project?: string[]; namePrefix?: string; environment?: string; inlineSegmentConstraints?: boolean; } export interface IFeatureToggleDeltaQuery extends IFeatureToggleQuery { toggleNames?: string[]; environment: string; } export interface IAddonParameterDefinition { name: string; displayName: string; type: string; description?: string; placeholder?: string; required: boolean; sensitive: boolean; } export interface IAddonDefinition { name: string; displayName: string; documentationUrl: string; description: string; deprecated?: string; parameters?: IAddonParameterDefinition[]; events?: string[]; tagTypes?: ITagType[]; installation?: IAddonInstallation; alerts?: IAddonAlert[]; howTo?: string; } export interface IAddonInstallation { url: string; title?: string; helpText?: string; } export interface IAddonAlert { type: 'success' | 'info' | 'warning' | 'error'; text: string; } export interface IAddonConfig { getLogger: LogProvider; unleashUrl: string; integrationEventsService: IntegrationEventsService; flagResolver: IFlagResolver; eventBus: EventEmitter; } export interface IUserWithRole { id: number; roleId: number; name?: string; username?: string; email?: string; imageUrl?: string; addedAt: Date; } export interface IRoleData { role: IRole; users: IUser[]; permissions: IPermission[]; } export interface IAvailablePermissions { root: IPermission[]; project: IPermission[]; environments: IEnvironmentPermission[]; } export interface IPermission { id: number; name: string; displayName: string; type: string; environment?: string | null; } export interface IEnvironmentPermission { name: string; permissions: IPermission[]; } export declare enum PermissionType { root = "root", project = "project" } export declare enum RoleName { ADMIN = "Admin", EDITOR = "Editor", VIEWER = "Viewer", OWNER = "Owner", MEMBER = "Member" } export declare enum RoleType { ROOT = "root", ROOT_CUSTOM = "root-custom", PROJECT = "project" } export interface IRoleIdentifier { roleId?: number; roleName?: RoleName; } export interface IFrontendClientApp { appName: string; instanceId: string; sdkVersion: string; sdkType: 'frontend'; environment: string; projects?: string[]; createdBy?: string; } export interface IClientApp { appName: string; instanceId: string; clientIp?: string; environment?: string; seenToggles?: string[]; metricsCount?: number; strategies?: string[] | Record<string, string>[]; projects?: string[]; count?: number; started?: string | number | Date; interval?: number; icon?: string; description?: string; color?: string; platformName?: string; platformVersion?: string; yggdrasilVersion?: string; specVersion?: string; sdkType?: 'frontend' | 'backend' | null; sdkVersion?: string; } export interface IAppFeature { name: string; description: string; type: string; project: string; enabled: boolean; stale: boolean; strategies: any; variants: any[]; createdAt: Date; lastSeenAt: Date; } export interface IAppName { appName: string; } export interface IMetricCounts { yes?: number; no?: number; variants?: Record<string, number>; } export interface IMetricsBucket { start: Date; stop: Date; toggles: { [key: string]: IMetricCounts; }; } export type CreateProject = Pick<IProject, 'name'> & { id?: string; mode?: ProjectMode; defaultStickiness?: string; environments?: string[]; changeRequestEnvironments?: { name: string; requiredApprovals?: number; }[]; }; export type ProjectCreated = Pick<IProject, 'id' | 'name' | 'mode' | 'defaultStickiness' | 'description' | 'featureLimit'> & { environments: string[]; changeRequestEnvironments?: { name: string; requiredApprovals: number; }[]; }; export interface IProject { id: string; name: string; description?: string; health?: number; createdAt?: Date; updatedAt?: Date; archivedAt?: Date; changeRequestsEnabled?: boolean; mode: ProjectMode; defaultStickiness: string; featureLimit?: number; featureNaming?: IFeatureNaming; linkTemplates?: IProjectLinkTemplate[]; } export interface IProjectApplications { applications: IProjectApplication[]; total: number; } export interface IProjectApplication { name: string; environments: string[]; instances: string[]; sdks: IProjectApplicationSdk[]; } export interface IProjectApplicationSdk { name: string; versions: string[]; } export interface IProjectUpdate { id: string; name: string; description?: string; mode?: ProjectMode; defaultStickiness?: string; featureLimit?: number; } /** * Extends IRole making description mandatory */ export interface ICustomRole extends IRole { description: string; } export interface IClientSegment { id: number; constraints: IConstraint[]; name: string; } export interface ISegment { id: number; name: string; description?: string; project?: string; constraints: IConstraint[]; usedInProjects?: number; usedInFeatures?: number; createdBy?: string; createdAt: Date; } export interface IFeatureStrategySegment { featureStrategyId: string; segmentId: number; } export interface IUserAccessOverview { userId: number; createdAt?: Date; userName?: string; userEmail: number; lastSeen?: Date; accessibleProjects: string[]; groups: string[]; rootRole: string; groupProjects: string[]; } export interface ISdkHeartbeat { sdkVersion: string; sdkName: string; metadata: ISdkHeartbeatMetadata; } export interface ISdkHeartbeatMetadata { platformName?: string; platformVersion?: string; yggdrasilVersion?: string; specVersion?: string; } //# sourceMappingURL=model.d.ts.map