import { ITagType } from './stores/tag-type-store';
import { LogProvider } from '../logger';
import { IRole } from './stores/access-store';
import { IUser } from './user';
import { ALL_OPERATORS } from '../util/constants';
export declare 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;
    constraints?: IConstraint[];
    segments?: number[];
    parameters?: {
        [key: string]: string;
    };
    sortOrder?: number;
}
export interface IFeatureStrategy {
    id: string;
    featureName: string;
    projectId: string;
    environment: string;
    strategyName: string;
    parameters: {
        [key: string]: string;
    };
    sortOrder?: number;
    constraints: IConstraint[];
    createdAt?: Date;
    segments?: number[];
}
export interface FeatureToggleDTO {
    name: string;
    description?: string;
    type?: string;
    stale?: boolean;
    archived?: boolean;
    archivedAt?: Date;
    createdAt?: Date;
    impressionData?: boolean;
    variants?: IVariant[];
}
export interface FeatureToggle extends FeatureToggleDTO {
    project: string;
    lastSeenAt?: Date;
    createdAt?: Date;
}
export interface IFeatureToggleClient {
    name: string;
    description: string;
    type: string;
    project: string;
    stale: boolean;
    variants: IVariant[];
    enabled: boolean;
    strategies: IStrategyConfig[];
    impressionData?: boolean;
    lastSeenAt?: Date;
    createdAt?: Date;
    tags?: ITag[];
    favorite?: boolean;
}
export interface IFeatureEnvironmentInfo {
    name: string;
    environment: string;
    enabled: boolean;
    strategies: IFeatureStrategy[];
}
export interface FeatureToggleWithEnvironment extends FeatureToggle {
    environments: IEnvironmentDetail[];
}
export interface FeatureToggleLegacy extends FeatureToggle {
    strategies: IStrategyConfig[];
    enabled: boolean;
}
export interface IEnvironmentDetail extends IEnvironmentOverview {
    strategies: IStrategyConfig[];
    variants: IVariant[];
}
export interface ISortOrder {
    [index: string]: number;
}
export interface IFeatureEnvironment {
    environment: string;
    featureName: string;
    enabled: boolean;
    variants?: IVariant[];
}
export interface IVariant {
    name: string;
    weight: number;
    weightType: string;
    payload?: {
        type: string;
        value: string;
    };
    stickiness: string;
    overrides?: {
        contextName: string;
        values: string[];
    }[];
}
export interface IEnvironment {
    name: string;
    type: string;
    sortOrder: number;
    enabled: boolean;
    protected: boolean;
    projectCount?: number;
    apiTokenCount?: number;
    enabledToggleCount?: number;
}
export interface IProjectEnvironment extends IEnvironment {
    projectApiTokenCount?: number;
    projectEnabledToggleCount?: number;
}
export interface IEnvironmentCreate {
    name: string;
    type: string;
    sortOrder?: number;
    enabled?: boolean;
}
export interface IEnvironmentClone {
    name: string;
    projects?: string[];
    type: string;
    clonePermissions?: boolean;
}
export interface IEnvironmentOverview {
    name: string;
    enabled: boolean;
    type: string;
    sortOrder: number;
}
export interface IFeatureOverview {
    name: string;
    type: string;
    stale: boolean;
    createdAt: Date;
    lastSeenAt: Date;
    environments: IEnvironmentOverview[];
}
export interface IProjectOverview {
    name: string;
    description: string;
    environments: string[];
    features: IFeatureOverview[];
    members: number;
    version: number;
    health: number;
    favorite?: boolean;
    updatedAt?: Date;
}
export interface IProjectHealthReport extends IProjectOverview {
    staleCount: number;
    potentiallyStaleCount: number;
    activeCount: number;
}
export interface IProjectParam {
    projectId: 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 ITag {
    value: string;
    type: 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;
    parameters?: IAddonParameterDefinition[];
    events?: string[];
    tagTypes?: ITagType[];
}
export interface IAddonConfig {
    getLogger: LogProvider;
    unleashUrl: string;
}
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 {
    project: IPermission[];
    environments: IEnvironmentPermission[];
}
export interface IPermission {
    id: number;
    name: string;
    displayName: string;
    type: string;
    environment?: string;
}
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",
    PROJECT = "project"
}
export interface IRoleIdentifier {
    roleId?: number;
    roleName?: RoleName;
}
export interface IClientApp {
    appName: string;
    instanceId: string;
    clientIp?: string;
    environment?: string;
    seenToggles?: string[];
    metricsCount?: number;
    strategies?: string[] | Record<string, string>[];
    bucket?: any;
    count?: number;
    started?: string | number | Date;
    interval?: number;
    icon?: string;
    description?: string;
    color?: 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: IMetricCounts;
}
export interface IImportFile extends ImportCommon {
    file: string;
}
interface ImportCommon {
    dropBeforeImport?: boolean;
    keepExisting?: boolean;
    userName?: string;
}
export interface IImportData extends ImportCommon {
    data: any;
}
export interface IProject {
    id: string;
    name: string;
    description: string;
    health?: number;
    createdAt?: Date;
    updatedAt?: Date;
    changeRequestsEnabled?: boolean;
}
export interface ICustomRole {
    id: number;
    name: string;
    description: string;
    type: string;
}
export interface IProjectWithCount extends IProject {
    featureCount: number;
    memberCount: number;
    favorite?: boolean;
}
export interface ISegment {
    id: number;
    name: string;
    description?: string;
    constraints: IConstraint[];
    createdBy?: string;
    createdAt: Date;
}
export interface IFeatureStrategySegment {
    featureStrategyId: string;
    segmentId: number;
}
export {};
