/**
 * GraphQL client for Variably API
 */
import { VariablyConfig, UserContext, Event, FlagEvaluationResponse, GateEvaluationResponse, BatchFlagEvaluationResponse, ExperimentMetric } from './types';
import { Logger } from './logger';
import { MetricsCollector } from './metrics';
export declare class GraphQLClient {
    private baseUrl;
    private apiKey;
    private timeout;
    private retryAttempts;
    private logger;
    private metrics;
    constructor(config: Required<VariablyConfig>, logger: Logger, metrics: MetricsCollector);
    /**
     * Evaluate a single feature flag
     */
    evaluateFlag(flagKey: string, context: UserContext): Promise<FlagEvaluationResponse>;
    /**
     * Evaluate multiple feature flags in batch
     */
    evaluateFlags(flagKeys: string[], context: UserContext): Promise<BatchFlagEvaluationResponse>;
    /**
     * Evaluate a feature gate
     */
    evaluateGate(gateKey: string, context: UserContext): Promise<GateEvaluationResponse>;
    /**
     * Track a single event
     */
    trackEvent(event: Event): Promise<void>;
    /**
     * Track multiple events in batch
     */
    trackEvents(events: Event[]): Promise<void>;
    /**
     * Track experiment metric
     */
    trackExperimentMetric(experimentId: string, metric: ExperimentMetric): Promise<void>;
    /**
     * Logout and blacklist current token
     */
    logout(): Promise<void>;
    /**
     * Execute LLM prompt
     */
    executeLLMPrompt(messages: Array<{
        role: string;
        content: string;
    }>, provider: string, model: string, temperature?: number, maxTokens?: number): Promise<{
        content: string;
        model: string;
        provider: string;
        tokenUsage: {
            promptTokens: number;
            completionTokens: number;
            totalTokens: number;
            estimatedCost: number;
        };
        finishReason: string;
    }>;
    /**
     * Evaluate a prompt experiment - selects variant, executes LLM, and saves evaluation
     * This is the recommended method for prompt experiments as it saves evaluation data
     */
    evaluatePromptExperiment(experimentKey: string, context: UserContext, inputVariables?: Record<string, any>, metadata?: Record<string, any>): Promise<{
        executionId: string;
        experimentId: string;
        variantUsed: string;
        content: string;
        model: string;
        provider: string;
        tokenUsage: {
            promptTokens: number;
            completionTokens: number;
            totalTokens: number;
            estimatedCost: number;
        };
        latencyMs: number;
        qualityScore?: number;
    }>;
    /**
     * Execute a GraphQL query
     */
    private executeQuery;
    /**
     * Execute a GraphQL mutation
     */
    private executeMutation;
    /**
     * Execute a GraphQL request with retry logic
     */
    private executeGraphQL;
    /**
     * Execute the actual HTTP request
     */
    private makeRequest;
    /**
     * Handle HTTP error responses
     */
    private handleHttpError;
    /**
     * Determine if an error should trigger a retry
     */
    private shouldRetry;
    /**
     * Convert SDK UserContext to GraphQL input format
     */
    private convertUserContext;
    /**
     * Track a success metric for an LLM prompt experiment
     * Uses the sdkTrackExperimentMetric GraphQL mutation
     */
    trackSuccessMetric(experimentId: string, metricName: string, metricKey: string, userId: string, sessionId?: string, variantId?: string, variantKey?: string, value?: number, metadata?: Record<string, any>): Promise<void>;
    /**
     * Sleep for a given number of milliseconds
     */
    private sleep;
}
//# sourceMappingURL=graphql-client.d.ts.map