import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, MappedOmit, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; export interface FeatureFlagStrategyScopeSchema { id: number; environment_scope: string; } export interface FeatureFlagStrategySchema { id: number; name: string; parameters: Record; scopes?: FeatureFlagStrategyScopeSchema[]; } export interface FeatureFlagSchema extends Record { name: string; description: string; active: boolean; version: string; created_at: string; updated_at: string; scopes?: string[]; strategies?: FeatureFlagStrategySchema[]; } export type CreateFeatureFlagOptions = { description?: string; active?: boolean; strategies?: { name: string; parameters?: Record; scopes?: MappedOmit[]; }; }; export type EditFeatureFlagOptions = { description?: string; active?: boolean; strategies?: { id: string; name?: string; _destroy?: boolean; parameters?: Record; scopes?: (FeatureFlagStrategyScopeSchema & { _destroy?: boolean })[]; }; }; export class FeatureFlags extends BaseResource { all( projectId: string | number, options?: { scope?: 'enabled' | 'disabled' } & PaginationRequestOptions

& Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/feature_flags`, options, ); } create( projectId: string | number, flagName: string, version: string, options?: CreateFeatureFlagOptions & Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/feature_flags`, { name: flagName, version, ...options, }, ); } edit( projectId: string | number, featureFlagName: string, options?: EditFeatureFlagOptions & Sudo & ShowExpanded, ): Promise> { return RequestHelper.put()( this, endpoint`projects/${projectId}/feature_flags/${featureFlagName}`, options, ); } remove( projectId: string | number, flagName: string, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/feature_flags/${flagName}`, options, ); } show( projectId: string | number, flagName: string, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/feature_flags/${flagName}`, options, ); } }