import type { FeatureId, FeatureState } from "./config"; /** * Interface for the core FeaturesRepository. * This interface defines methods for checking feature flags and team feature access. */ export interface IFeaturesRepository { checkIfFeatureIsEnabledGlobally(slug: FeatureId): Promise; checkIfUserHasFeature(userId: number, slug: string): Promise; getUserFeaturesStatus(userId: number, slugs: string[]): Promise>; checkIfUserHasFeatureNonHierarchical(userId: number, slug: string): Promise; checkIfTeamHasFeature(teamId: number, slug: FeatureId): Promise; getTeamsWithFeatureEnabled(slug: FeatureId): Promise; setUserFeatureState( input: | { userId: number; featureId: FeatureId; state: "enabled" | "disabled"; assignedBy: string } | { userId: number; featureId: FeatureId; state: "inherit" } ): Promise; setTeamFeatureState( input: | { teamId: number; featureId: FeatureId; state: "enabled" | "disabled"; assignedBy: string } | { teamId: number; featureId: FeatureId; state: "inherit" } ): Promise; /** * Get user's feature states for multiple features. * @returns Record */ getUserFeatureStates(input: { userId: number; featureIds: FeatureId[]; }): Promise>; /** * Get multiple features' states across multiple teams. * Optimized for querying many teams for many features. * @returns Record> */ getTeamsFeatureStates(input: { teamIds: number[]; featureIds: FeatureId[]; }): Promise>>; /** * Get user's autoOptInFeatures flag. * @returns Promise - True if user has auto opt-in enabled */ getUserAutoOptIn(userId: number): Promise; /** * Get autoOptInFeatures for multiple teams (batch). * @returns Promise> - Map of teamId to autoOptInFeatures value */ getTeamsAutoOptIn(teamIds: number[]): Promise>; /** * Set user's autoOptInFeatures flag. */ setUserAutoOptIn(userId: number, enabled: boolean): Promise; /** * Set team's autoOptInFeatures flag. */ setTeamAutoOptIn(teamId: number, enabled: boolean): Promise; }