import { BaseTool } from '../../BaseTool';
import { ToolContext } from '../../ToolContext';
import { ApiParameter, OperationEndpoint, Schema } from '../common/common';
import { ParsedOperation } from './OpenApiSpecParser';
import { AuthCredential, AuthScheme } from '../auth/AuthTypes';
/**
 * Converts a snake_case string to a lowerCamelCase string
 * @param snakeCaseString The input snake_case string
 * @returns The lowerCamelCase string
 */
export declare function snakeToLowerCamel(snakeCaseString: string): string;
/**
 * Normalizes a JSON Schema type into a Gemini Schema type and checks if it's nullable
 * @param jsonSchemaType The JSON Schema type (string or array of strings)
 * @returns A tuple of [normalizedType, isNullable]
 */
export declare function normalizeJsonSchemaType(jsonSchemaType: string | string[] | null | undefined): [string | null, boolean];
/**
 * Converts an OpenAPI schema to a Gemini Schema
 * @param openApiSchema The OpenAPI schema object
 * @returns A Gemini Schema object
 */
export declare function toGeminiSchema(openApiSchema: Schema | null | undefined): any;
/**
 * Authentication preparation state
 */
export type AuthPreparationState = 'pending' | 'done';
/**
 * RestApiTool options
 */
export interface RestApiToolOptions {
    name: string;
    description: string;
    endpoint: OperationEndpoint | string;
    operation: any;
    authScheme?: AuthScheme;
    authCredential?: AuthCredential;
    shouldParseOperation?: boolean;
}
/**
 * A generic tool that interacts with a REST API
 */
export declare class RestApiTool extends BaseTool {
    /**
     * The name of the tool
     */
    name: string;
    /**
     * The description of the tool
     */
    description: string;
    /**
     * The endpoint information for the REST API
     */
    endpoint: OperationEndpoint;
    /**
     * The OpenAPI operation object
     */
    operation: any;
    /**
     * The authentication scheme for the API
     */
    authScheme?: AuthScheme;
    /**
     * The authentication credential for the API
     */
    authCredential?: AuthCredential;
    /**
     * Parameters for the API call
     */
    parameters: ApiParameter[];
    /**
     * Return value from the API call
     */
    returnValue?: ApiParameter;
    /**
     * Create a new RestApiTool
     * @param options Options for the REST API tool
     */
    constructor(options: RestApiToolOptions);
    /**
     * Create a RestApiTool from a ParsedOperation
     * @param parsed The parsed operation
     * @returns A new RestApiTool
     */
    static fromParsedOperation(parsed: ParsedOperation): RestApiTool;
    /**
     * Parse the operation to extract parameters and return value
     */
    private _parseOperation;
    /**
     * Get the function declaration for the LLM
     * @returns The function declaration
     */
    protected _getDeclaration(): any;
    /**
     * Configure the authentication scheme
     * @param authScheme The authentication scheme
     */
    configureAuthScheme(authScheme: AuthScheme): void;
    /**
     * Configure the authentication credential
     * @param authCredential The authentication credential
     */
    configureAuthCredential(authCredential: AuthCredential): void;
    /**
     * Prepare request parameters for the API call
     * @param params The API parameters
     * @param args The function arguments
     * @returns The prepared request parameters
     */
    private _prepareRequestParams;
    /**
     * Execute the tool
     * @param args The function arguments
     * @param context The tool context
     * @returns The API response
     */
    execute(args: Record<string, any>, context: ToolContext): Promise<any>;
    /**
     * String representation of the tool
     */
    toString(): string;
}
