import { type Variant } from 'unleash-client';
import type { MetricFlagContext } from 'unleash-client/lib/impact-metrics/metric-types.js';
import type { Context } from '../features/playground/feature-evaluator/index.js';
export type IFlagKey = 'accessLogs' | 'anonymiseEventLog' | 'encryptEmails' | 'enableLicense' | 'responseTimeWithAppNameKillSwitch' | 'maintenanceMode' | 'messageBanner' | 'strictSchemaValidation' | 'personalAccessTokensKillSwitch' | 'migrationLock' | 'demo' | 'interactiveDemoKillSwitch' | 'advancedPlayground' | 'filterInvalidClientMetrics' | 'disableMetrics' | 'signals' | 'automatedActions' | 'celebrateUnleash' | 'feedbackPosting' | 'extendedUsageMetrics' | 'feedbackComments' | 'killScheduledChangeRequestCache' | 'estimateTrafficDataCost' | 'useMemoizedActiveTokens' | 'queryMissingTokens' | 'disableUpdateMaxRevisionId' | 'disablePublishUnannouncedEvents' | 'outdatedSdksBanner' | 'responseTimeMetricsFix' | 'disableShowContextFieldSelectionValues' | 'manyStrategiesPagination' | 'enableLegacyVariants' | 'extendedMetrics' | 'removeUnsafeInlineStyleSrc' | 'projectRoleAssignment' | 'webhookDomainLogging' | 'productivityReportEmail' | 'productivityReportUnsubscribers' | 'showUserDeviceCount' | 'memorizeStats' | 'streaming' | 'denyStreamingForNonEdge' | 'deltaApi' | 'deltaDiff' | 'uniqueSdkTracking' | 'consumptionModel' | 'consumptionModelUI' | 'customMetrics' | 'impactMetrics' | 'etagByEnv' | 'fetchMode' | 'optimizeLifecycle' | 'milestoneProgression' | 'plausibleMetrics' | 'safeguards' | 'newInUnleash' | 'oidcPkceSupport' | 'gtmReleaseManagement' | 'readOnlyUsersUI' | 'remoteMcpServer' | 'regexConstraintOperator' | 'signupDialog' | 'enterpriseEdgeTokensList' | 'impactMetricsFlagPage' | 'featureEnvSafeguards' | 'filterFavorites' | 'userTokenWithClientApiLoggingKillSwitch' | 'newSignOut' | 'externalPrometheusImpactMetrics' | 'onlyFeatureTokensWithFeatureAPIs' | 'pendingUserAccessRequests';
export type IFlags = Partial<{
    [key in IFlagKey]: boolean | Variant;
}>;
export declare const defaultExperimentalOptions: IExperimentalOptions;
export interface IExperimentalOptions {
    flags: IFlags;
    externalResolver: IExternalFlagResolver;
}
export interface IFlagContext extends Context {
}
export interface IFlagResolver {
    getAll: (context?: IFlagContext) => IFlags;
    isEnabled: (expName: IFlagKey, context?: IFlagContext) => boolean;
    getVariant: (expName: IFlagKey, context?: IFlagContext) => Variant;
    getStaticContext: () => IFlagContext;
    impactMetrics?: IImpactMetricsResolver;
}
export interface IExternalFlagResolver {
    isEnabled: (flagName: IFlagKey, context?: IFlagContext) => boolean;
    getVariant: (flagName: IFlagKey, context?: IFlagContext) => Variant;
    getStaticContext: () => IFlagContext;
    impactMetrics?: IImpactMetricsResolver;
}
export interface IImpactMetricsResolver {
    defineCounter(name: string, help: string): any;
    defineGauge(name: string, help: string): any;
    defineHistogram(name: string, help: string, buckets?: number[]): any;
    incrementCounter(name: string, value?: number, metricsFlagContext?: MetricFlagContext): void;
    updateGauge(name: string, value: number, metricsFlagContext?: MetricFlagContext): void;
    observeHistogram(name: string, value: number, metricsFlagContext?: MetricFlagContext): void;
}
//# sourceMappingURL=experimental.d.ts.map