/**
 * Configuration Validation System using Zod
 *
 * @fileoverview Provides runtime validation of config.json with detailed error messages,
 * warnings for potentially problematic configurations, and automatic merging with defaults.
 *
 * @example
 * ```typescript
 * import { ConfigValidator } from './ConfigValidator.js';
 *
 * // Validate a configuration object
 * const result = ConfigValidator.validate(userConfig);
 * if (result.success) {
 *   console.log('Configuration is valid:', result.config);
 * } else {
 *   console.error('Validation errors:', result.errors);
 * }
 *
 * // Merge with defaults
 * const mergedConfig = ConfigValidator.mergeWithDefaults(partialConfig);
 * ```
 *
 * @category Configuration
 */
import { z } from 'zod';
declare const BrowserConfigSchema: z.ZodObject<{
    type: z.ZodEnum<["chrome", "edge", "firefox"]>;
    debugPort: z.ZodDefault<z.ZodNumber>;
    autoLaunch: z.ZodDefault<z.ZodBoolean>;
    allowLaunch: z.ZodDefault<z.ZodBoolean>;
    useExistingOnly: z.ZodDefault<z.ZodBoolean>;
    endpoint: z.ZodOptional<z.ZodString>;
    connectionTimeout: z.ZodDefault<z.ZodNumber>;
    retryAttempts: z.ZodDefault<z.ZodNumber>;
    retryDelay: z.ZodDefault<z.ZodNumber>;
    useSeparateInstance: z.ZodDefault<z.ZodBoolean>;
    mcpProfilePath: z.ZodDefault<z.ZodString>;
    copyUserData: z.ZodDefault<z.ZodBoolean>;
    launchTimeout: z.ZodDefault<z.ZodNumber>;
    confirmDestructiveActions: z.ZodDefault<z.ZodBoolean>;
    sourceProfilePath: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    type: "chrome" | "edge" | "firefox";
    debugPort: number;
    autoLaunch: boolean;
    allowLaunch: boolean;
    useExistingOnly: boolean;
    connectionTimeout: number;
    retryAttempts: number;
    retryDelay: number;
    useSeparateInstance: boolean;
    mcpProfilePath: string;
    copyUserData: boolean;
    launchTimeout: number;
    confirmDestructiveActions: boolean;
    endpoint?: string | undefined;
    sourceProfilePath?: string | undefined;
}, {
    type: "chrome" | "edge" | "firefox";
    debugPort?: number | undefined;
    autoLaunch?: boolean | undefined;
    allowLaunch?: boolean | undefined;
    useExistingOnly?: boolean | undefined;
    endpoint?: string | undefined;
    connectionTimeout?: number | undefined;
    retryAttempts?: number | undefined;
    retryDelay?: number | undefined;
    useSeparateInstance?: boolean | undefined;
    mcpProfilePath?: string | undefined;
    copyUserData?: boolean | undefined;
    launchTimeout?: number | undefined;
    confirmDestructiveActions?: boolean | undefined;
    sourceProfilePath?: string | undefined;
}>;
declare const ServerConfigSchema: z.ZodObject<{
    strategy: z.ZodDefault<z.ZodEnum<["direct-cdp", "playwright", "hybrid", "separate-instance"]>>;
    lazyInitialization: z.ZodDefault<z.ZodBoolean>;
    initializeOnStartup: z.ZodDefault<z.ZodBoolean>;
    connectOnFirstUse: z.ZodDefault<z.ZodBoolean>;
    verbose: z.ZodDefault<z.ZodBoolean>;
    maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
    strategy: "direct-cdp" | "playwright" | "hybrid" | "separate-instance";
    lazyInitialization: boolean;
    initializeOnStartup: boolean;
    connectOnFirstUse: boolean;
    verbose: boolean;
    maxConcurrentConnections: number;
}, {
    strategy?: "direct-cdp" | "playwright" | "hybrid" | "separate-instance" | undefined;
    lazyInitialization?: boolean | undefined;
    initializeOnStartup?: boolean | undefined;
    connectOnFirstUse?: boolean | undefined;
    verbose?: boolean | undefined;
    maxConcurrentConnections?: number | undefined;
}>;
declare const SafetyConfigSchema: z.ZodObject<{
    neverLaunchBrowser: z.ZodDefault<z.ZodBoolean>;
    requireExistingBrowser: z.ZodDefault<z.ZodBoolean>;
    allowSeparateInstance: z.ZodDefault<z.ZodBoolean>;
    validateConnection: z.ZodDefault<z.ZodBoolean>;
    timeoutConnections: z.ZodDefault<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    neverLaunchBrowser: boolean;
    requireExistingBrowser: boolean;
    allowSeparateInstance: boolean;
    validateConnection: boolean;
    timeoutConnections: boolean;
}, {
    neverLaunchBrowser?: boolean | undefined;
    requireExistingBrowser?: boolean | undefined;
    allowSeparateInstance?: boolean | undefined;
    validateConnection?: boolean | undefined;
    timeoutConnections?: boolean | undefined;
}>;
declare const FeaturesConfigSchema: z.ZodObject<{
    preventAutoStart: z.ZodDefault<z.ZodBoolean>;
    useExistingTabs: z.ZodDefault<z.ZodBoolean>;
    duplicateUserData: z.ZodDefault<z.ZodBoolean>;
    respectUserBrowser: z.ZodDefault<z.ZodBoolean>;
    separateInstance: z.ZodDefault<z.ZodBoolean>;
    autoLaunchWhenNeeded: z.ZodDefault<z.ZodBoolean>;
    confirmDestructiveActions: z.ZodDefault<z.ZodBoolean>;
    errorRetry: z.ZodDefault<z.ZodBoolean>;
    gracefulFailure: z.ZodDefault<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    confirmDestructiveActions: boolean;
    preventAutoStart: boolean;
    useExistingTabs: boolean;
    duplicateUserData: boolean;
    respectUserBrowser: boolean;
    separateInstance: boolean;
    autoLaunchWhenNeeded: boolean;
    errorRetry: boolean;
    gracefulFailure: boolean;
}, {
    confirmDestructiveActions?: boolean | undefined;
    preventAutoStart?: boolean | undefined;
    useExistingTabs?: boolean | undefined;
    duplicateUserData?: boolean | undefined;
    respectUserBrowser?: boolean | undefined;
    separateInstance?: boolean | undefined;
    autoLaunchWhenNeeded?: boolean | undefined;
    errorRetry?: boolean | undefined;
    gracefulFailure?: boolean | undefined;
}>;
declare const PathsConfigSchema: z.ZodObject<{
    chrome: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
}, "strip", z.ZodTypeAny, {
    chrome: Record<string, string>;
}, {
    chrome?: Record<string, string> | undefined;
}>;
export declare const AppConfigSchema: z.ZodObject<{
    browser: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        type: z.ZodEnum<["chrome", "edge", "firefox"]>;
        debugPort: z.ZodDefault<z.ZodNumber>;
        autoLaunch: z.ZodDefault<z.ZodBoolean>;
        allowLaunch: z.ZodDefault<z.ZodBoolean>;
        useExistingOnly: z.ZodDefault<z.ZodBoolean>;
        endpoint: z.ZodOptional<z.ZodString>;
        connectionTimeout: z.ZodDefault<z.ZodNumber>;
        retryAttempts: z.ZodDefault<z.ZodNumber>;
        retryDelay: z.ZodDefault<z.ZodNumber>;
        useSeparateInstance: z.ZodDefault<z.ZodBoolean>;
        mcpProfilePath: z.ZodDefault<z.ZodString>;
        copyUserData: z.ZodDefault<z.ZodBoolean>;
        launchTimeout: z.ZodDefault<z.ZodNumber>;
        confirmDestructiveActions: z.ZodDefault<z.ZodBoolean>;
        sourceProfilePath: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "chrome" | "edge" | "firefox";
        debugPort: number;
        autoLaunch: boolean;
        allowLaunch: boolean;
        useExistingOnly: boolean;
        connectionTimeout: number;
        retryAttempts: number;
        retryDelay: number;
        useSeparateInstance: boolean;
        mcpProfilePath: string;
        copyUserData: boolean;
        launchTimeout: number;
        confirmDestructiveActions: boolean;
        endpoint?: string | undefined;
        sourceProfilePath?: string | undefined;
    }, {
        type: "chrome" | "edge" | "firefox";
        debugPort?: number | undefined;
        autoLaunch?: boolean | undefined;
        allowLaunch?: boolean | undefined;
        useExistingOnly?: boolean | undefined;
        endpoint?: string | undefined;
        connectionTimeout?: number | undefined;
        retryAttempts?: number | undefined;
        retryDelay?: number | undefined;
        useSeparateInstance?: boolean | undefined;
        mcpProfilePath?: string | undefined;
        copyUserData?: boolean | undefined;
        launchTimeout?: number | undefined;
        confirmDestructiveActions?: boolean | undefined;
        sourceProfilePath?: string | undefined;
    }>>>;
    server: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        strategy: z.ZodDefault<z.ZodEnum<["direct-cdp", "playwright", "hybrid", "separate-instance"]>>;
        lazyInitialization: z.ZodDefault<z.ZodBoolean>;
        initializeOnStartup: z.ZodDefault<z.ZodBoolean>;
        connectOnFirstUse: z.ZodDefault<z.ZodBoolean>;
        verbose: z.ZodDefault<z.ZodBoolean>;
        maxConcurrentConnections: z.ZodDefault<z.ZodNumber>;
    }, "strip", z.ZodTypeAny, {
        strategy: "direct-cdp" | "playwright" | "hybrid" | "separate-instance";
        lazyInitialization: boolean;
        initializeOnStartup: boolean;
        connectOnFirstUse: boolean;
        verbose: boolean;
        maxConcurrentConnections: number;
    }, {
        strategy?: "direct-cdp" | "playwright" | "hybrid" | "separate-instance" | undefined;
        lazyInitialization?: boolean | undefined;
        initializeOnStartup?: boolean | undefined;
        connectOnFirstUse?: boolean | undefined;
        verbose?: boolean | undefined;
        maxConcurrentConnections?: number | undefined;
    }>>>;
    safety: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        neverLaunchBrowser: z.ZodDefault<z.ZodBoolean>;
        requireExistingBrowser: z.ZodDefault<z.ZodBoolean>;
        allowSeparateInstance: z.ZodDefault<z.ZodBoolean>;
        validateConnection: z.ZodDefault<z.ZodBoolean>;
        timeoutConnections: z.ZodDefault<z.ZodBoolean>;
    }, "strip", z.ZodTypeAny, {
        neverLaunchBrowser: boolean;
        requireExistingBrowser: boolean;
        allowSeparateInstance: boolean;
        validateConnection: boolean;
        timeoutConnections: boolean;
    }, {
        neverLaunchBrowser?: boolean | undefined;
        requireExistingBrowser?: boolean | undefined;
        allowSeparateInstance?: boolean | undefined;
        validateConnection?: boolean | undefined;
        timeoutConnections?: boolean | undefined;
    }>>>;
    features: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        preventAutoStart: z.ZodDefault<z.ZodBoolean>;
        useExistingTabs: z.ZodDefault<z.ZodBoolean>;
        duplicateUserData: z.ZodDefault<z.ZodBoolean>;
        respectUserBrowser: z.ZodDefault<z.ZodBoolean>;
        separateInstance: z.ZodDefault<z.ZodBoolean>;
        autoLaunchWhenNeeded: z.ZodDefault<z.ZodBoolean>;
        confirmDestructiveActions: z.ZodDefault<z.ZodBoolean>;
        errorRetry: z.ZodDefault<z.ZodBoolean>;
        gracefulFailure: z.ZodDefault<z.ZodBoolean>;
    }, "strip", z.ZodTypeAny, {
        confirmDestructiveActions: boolean;
        preventAutoStart: boolean;
        useExistingTabs: boolean;
        duplicateUserData: boolean;
        respectUserBrowser: boolean;
        separateInstance: boolean;
        autoLaunchWhenNeeded: boolean;
        errorRetry: boolean;
        gracefulFailure: boolean;
    }, {
        confirmDestructiveActions?: boolean | undefined;
        preventAutoStart?: boolean | undefined;
        useExistingTabs?: boolean | undefined;
        duplicateUserData?: boolean | undefined;
        respectUserBrowser?: boolean | undefined;
        separateInstance?: boolean | undefined;
        autoLaunchWhenNeeded?: boolean | undefined;
        errorRetry?: boolean | undefined;
        gracefulFailure?: boolean | undefined;
    }>>>;
    paths: z.ZodDefault<z.ZodOptional<z.ZodObject<{
        chrome: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
    }, "strip", z.ZodTypeAny, {
        chrome: Record<string, string>;
    }, {
        chrome?: Record<string, string> | undefined;
    }>>>;
}, "strip", z.ZodTypeAny, {
    browser: {
        type: "chrome" | "edge" | "firefox";
        debugPort: number;
        autoLaunch: boolean;
        allowLaunch: boolean;
        useExistingOnly: boolean;
        connectionTimeout: number;
        retryAttempts: number;
        retryDelay: number;
        useSeparateInstance: boolean;
        mcpProfilePath: string;
        copyUserData: boolean;
        launchTimeout: number;
        confirmDestructiveActions: boolean;
        endpoint?: string | undefined;
        sourceProfilePath?: string | undefined;
    };
    server: {
        strategy: "direct-cdp" | "playwright" | "hybrid" | "separate-instance";
        lazyInitialization: boolean;
        initializeOnStartup: boolean;
        connectOnFirstUse: boolean;
        verbose: boolean;
        maxConcurrentConnections: number;
    };
    safety: {
        neverLaunchBrowser: boolean;
        requireExistingBrowser: boolean;
        allowSeparateInstance: boolean;
        validateConnection: boolean;
        timeoutConnections: boolean;
    };
    features: {
        confirmDestructiveActions: boolean;
        preventAutoStart: boolean;
        useExistingTabs: boolean;
        duplicateUserData: boolean;
        respectUserBrowser: boolean;
        separateInstance: boolean;
        autoLaunchWhenNeeded: boolean;
        errorRetry: boolean;
        gracefulFailure: boolean;
    };
    paths: {
        chrome: Record<string, string>;
    };
}, {
    browser?: {
        type: "chrome" | "edge" | "firefox";
        debugPort?: number | undefined;
        autoLaunch?: boolean | undefined;
        allowLaunch?: boolean | undefined;
        useExistingOnly?: boolean | undefined;
        endpoint?: string | undefined;
        connectionTimeout?: number | undefined;
        retryAttempts?: number | undefined;
        retryDelay?: number | undefined;
        useSeparateInstance?: boolean | undefined;
        mcpProfilePath?: string | undefined;
        copyUserData?: boolean | undefined;
        launchTimeout?: number | undefined;
        confirmDestructiveActions?: boolean | undefined;
        sourceProfilePath?: string | undefined;
    } | undefined;
    server?: {
        strategy?: "direct-cdp" | "playwright" | "hybrid" | "separate-instance" | undefined;
        lazyInitialization?: boolean | undefined;
        initializeOnStartup?: boolean | undefined;
        connectOnFirstUse?: boolean | undefined;
        verbose?: boolean | undefined;
        maxConcurrentConnections?: number | undefined;
    } | undefined;
    safety?: {
        neverLaunchBrowser?: boolean | undefined;
        requireExistingBrowser?: boolean | undefined;
        allowSeparateInstance?: boolean | undefined;
        validateConnection?: boolean | undefined;
        timeoutConnections?: boolean | undefined;
    } | undefined;
    features?: {
        confirmDestructiveActions?: boolean | undefined;
        preventAutoStart?: boolean | undefined;
        useExistingTabs?: boolean | undefined;
        duplicateUserData?: boolean | undefined;
        respectUserBrowser?: boolean | undefined;
        separateInstance?: boolean | undefined;
        autoLaunchWhenNeeded?: boolean | undefined;
        errorRetry?: boolean | undefined;
        gracefulFailure?: boolean | undefined;
    } | undefined;
    paths?: {
        chrome?: Record<string, string> | undefined;
    } | undefined;
}>;
export type ValidatedAppConfig = z.infer<typeof AppConfigSchema>;
export type ValidatedBrowserConfig = z.infer<typeof BrowserConfigSchema>;
export type ValidatedServerConfig = z.infer<typeof ServerConfigSchema>;
export type ValidatedSafetyConfig = z.infer<typeof SafetyConfigSchema>;
/**
 * Configuration validation result
 */
export interface ValidationResult {
    success: boolean;
    config?: ValidatedAppConfig;
    errors?: ValidationError[];
    warnings?: ValidationWarning[];
}
export interface ValidationError {
    path: string;
    message: string;
    code: string;
    received?: any;
    expected?: any;
}
export interface ValidationWarning {
    path: string;
    message: string;
    suggestion?: string;
}
/**
 * Configuration Validator class providing comprehensive validation capabilities.
 *
 * @description This class uses Zod schemas to validate configuration objects,
 * generate helpful warnings, and merge user configurations with sensible defaults.
 *
 * @example
 * ```typescript
 * // Basic validation
 * const result = ConfigValidator.validate(userConfig);
 *
 * // Validation with error throwing
 * const validConfig = ConfigValidator.validateOrThrow(userConfig);
 *
 * // Merge with defaults
 * const mergedConfig = ConfigValidator.mergeWithDefaults(partialConfig);
 * ```
 */
export declare class ConfigValidator {
    /**
     * Validates a configuration object against the schema.
     *
     * @param config - The configuration object to validate
     * @returns Validation result with success status, validated config, errors, and warnings
     *
     * @example
     * ```typescript
     * const result = ConfigValidator.validate({
     *   browser: { type: 'chrome', debugPort: 9223 }
     * });
     *
     * if (result.success) {
     *   console.log('Valid config:', result.config);
     *   if (result.warnings?.length) {
     *     console.warn('Warnings:', result.warnings);
     *   }
     * } else {
     *   console.error('Validation failed:', result.errors);
     * }
     * ```
     */
    static validate(config: any): ValidationResult;
    /**
     * Validate and throw on error
     */
    static validateOrThrow(config: any): ValidatedAppConfig;
    /**
     * Format Zod errors into our error format
     */
    private static formatZodErrors;
    /**
     * Generate warnings for potentially problematic configurations
     */
    private static generateWarnings;
    /**
     * Get default configuration
     */
    static getDefaultConfig(): ValidatedAppConfig;
    /**
     * Merge user config with defaults
     */
    static mergeWithDefaults(userConfig: any): ValidatedAppConfig;
    /**
     * Deep merge two objects
     */
    private static deepMerge;
    /**
     * Validate specific configuration section
     */
    static validateSection<T>(sectionName: keyof ValidatedAppConfig, config: any, schema: z.ZodSchema<T>): ValidationResult;
}
export { BrowserConfigSchema, ServerConfigSchema, SafetyConfigSchema, FeaturesConfigSchema, PathsConfigSchema };
//# sourceMappingURL=ConfigValidator.d.ts.map