UNPKG

unleash-server

Version:

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

113 lines 7.36 kB
import type { IAuditUser, IUser } from '../../types/user.js'; import type { AccessService, AccessWithRoles } from '../../services/access-service.js'; import { type CreateProject, type FeatureToggle, type IProject, type IProjectApplications, type IProjectHealth, type IProjectOverview, type IProjectRoleUsage, type IProjectUpdate, type IUnleashConfig, type IUnleashStores, type ProjectCreated } from '../../types/index.js'; import type { IRoleDescriptor } from '../../types/stores/access-store.js'; import type { FeatureToggleService } from '../feature-toggle/feature-toggle-service.js'; import type { GroupService } from '../../services/group-service.js'; import type { FavoritesService } from '../../services/favorites-service.js'; import type { ProjectDoraMetricsSchema } from '../../openapi/index.js'; import type { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType.js'; import type EventService from '../events/event-service.js'; import type { IProjectApplicationsSearchParams, IProjectEnterpriseSettingsUpdate, IProjectQuery, IProjectsQuery } from './project-store-type.js'; import type { ApiTokenService } from '../../services/index.js'; import type { ProjectForUi } from './project-read-model-type.js'; import type { ResourceLimitsService } from '../resource-limits/resource-limits-service.js'; type Days = number; type Count = number; export interface IProjectStats { avgTimeToProdCurrentWindow: Days; createdCurrentWindow: Count; createdPastWindow: Count; archivedCurrentWindow: Count; archivedPastWindow: Count; projectActivityCurrentWindow: Count; projectActivityPastWindow: Count; projectMembersAddedCurrentWindow: Count; } interface ICalculateStatus { projectId: string; updates: IProjectStats; } export default class ProjectService { private projectStore; private projectOwnersReadModel; private projectFlagCreatorsReadModel; private accessService; private eventStore; private featureToggleStore; private featureEnvironmentStore; private environmentStore; private groupService; private logger; private featureToggleService; private privateProjectChecker; private accountStore; private apiTokenService; private favoritesService; private eventService; private projectStatsStore; private flagResolver; private isEnterprise; private resourceLimitsService; private eventBus; private projectReadModel; private onboardingReadModel; private timer; constructor({ projectStore, projectOwnersReadModel, projectFlagCreatorsReadModel, eventStore, featureToggleStore, environmentStore, featureEnvironmentStore, accountStore, projectStatsStore, projectReadModel, onboardingReadModel, }: Pick<IUnleashStores, 'projectStore' | 'projectOwnersReadModel' | 'projectFlagCreatorsReadModel' | 'eventStore' | 'featureToggleStore' | 'environmentStore' | 'featureEnvironmentStore' | 'accountStore' | 'projectStatsStore' | 'projectReadModel' | 'onboardingReadModel'>, config: IUnleashConfig, accessService: AccessService, featureToggleService: FeatureToggleService, groupService: GroupService, favoriteService: FavoritesService, eventService: EventService, privateProjectChecker: IPrivateProjectChecker, apiTokenService: ApiTokenService, resourceLimitsService: ResourceLimitsService); getProjects(query?: IProjectQuery & IProjectsQuery, userId?: number): Promise<ProjectForUi[]>; addOwnersToProjects(projects: ProjectForUi[]): Promise<ProjectForUi[]>; getProject(id: string): Promise<IProject>; private validateAndProcessFeatureNamingPattern; private validateEnvironmentsExist; validateProjectEnvironments(environments: string[] | undefined): Promise<void>; validateProjectLimit(): Promise<void>; generateProjectId(name: string): Promise<string>; getAllChangeRequestEnvironments(newProject: CreateProject): Promise<CreateProject['changeRequestEnvironments']>; createProject(newProject: CreateProject, user: IUser, auditUser: IAuditUser, enableChangeRequestsForSpecifiedEnvironments?: (environments: CreateProject['changeRequestEnvironments']) => Promise<ProjectCreated['changeRequestEnvironments']>): Promise<ProjectCreated>; updateProject(updatedProject: IProjectUpdate, auditUser: IAuditUser): Promise<void>; updateProjectEnterpriseSettings(updatedProject: IProjectEnterpriseSettingsUpdate, auditUser: IAuditUser): Promise<void>; checkProjectsCompatibility(feature: FeatureToggle, newProjectId: string): Promise<boolean>; addEnvironmentToProject(project: string, environment: string): Promise<void>; private validateActiveProject; changeProject(newProjectId: string, featureName: string, user: IUser, currentProjectId: string, auditUser: IAuditUser): Promise<any>; deleteProject(id: string, user: IUser, auditUser: IAuditUser): Promise<void>; archiveProject(id: string, auditUser: IAuditUser): Promise<void>; reviveProject(id: string, auditUser: IAuditUser): Promise<void>; validateId(id: string): Promise<boolean>; validateUniqueId(id: string): Promise<void>; getAccessToProject(projectId: string): Promise<AccessWithRoles>; /** * @deprecated use removeUserAccess */ removeUser(projectId: string, roleId: number, userId: number, auditUser: IAuditUser): Promise<void>; removeUserAccess(projectId: string, userId: number, auditUser: IAuditUser): Promise<void>; removeGroupAccess(projectId: string, groupId: number, auditUser: IAuditUser): Promise<void>; addGroup(projectId: string, roleId: number, groupId: number, auditUser: IAuditUser): Promise<void>; private isAdmin; private isProjectOwner; private isAllowedToAddAccess; addAccess(projectId: string, roles: number[], groups: number[], users: number[], auditUser: IAuditUser): Promise<void>; setRolesForUser(projectId: string, userId: number, newRoles: number[], auditUser: IAuditUser): Promise<void>; setRolesForGroup(projectId: string, groupId: number, newRoles: number[], auditUser: IAuditUser): Promise<void>; findProjectRole(projectId: string, roleId: number): Promise<IRoleDescriptor>; /** @deprecated use projectInsightsService instead */ getDoraMetrics(projectId: string): Promise<ProjectDoraMetricsSchema>; getApplications(searchParams: IProjectApplicationsSearchParams): Promise<IProjectApplications>; getProjectFlagCreators(projectId: string): Promise<{ id: number; name: string; }[]>; changeRole(projectId: string, roleId: number, userId: number, auditUser: IAuditUser): Promise<void>; getMembers(projectId: string): Promise<number>; getProjectUsers(projectId: string): Promise<Array<Pick<IUser, 'id' | 'email' | 'username'>>>; isProjectUser(userId: number, projectId: string): Promise<boolean>; getProjectsByUser(userId: number): Promise<string[]>; getProjectRoleUsage(roleId: number): Promise<IProjectRoleUsage[]>; statusJob(): Promise<void>; getStatusUpdates(projectId: string): Promise<ICalculateStatus>; getProjectHealth(projectId: string, archived?: boolean, userId?: number): Promise<IProjectHealth>; getProjectOverview(projectId: string, archived?: boolean, userId?: number): Promise<IProjectOverview>; removePropertiesForNonEnterprise(data: any): any; } export {}; //# sourceMappingURL=project-service.d.ts.map