import { ZodObject, ZodRawShape } from 'zod';
import { ITransport } from './transport.types.js';
import { BoundParams, BoundValue } from './utils.js';
import { ClientHeadersConfig } from './client.js';
export type AuthTokenGetter = () => string | Promise<string>;
export type AuthTokenGetters = Record<string, AuthTokenGetter>;
export type RequiredAuthnParams = Record<string, string[]>;
/**
 * A loaded, callable tool. Invoke it with an arguments object to run the tool on
 * the remote Toolbox server. The attached methods return new ToolboxTool
 * instances with additional auth-token getters or pre-bound parameters.
 */
export interface ToolboxTool {
    (callArguments?: Record<string, unknown>): Promise<string>;
    toolName: string;
    description: string;
    params: ZodObject<ZodRawShape>;
    boundParams: BoundParams;
    authTokenGetters: AuthTokenGetters;
    requiredAuthnParams: RequiredAuthnParams;
    requiredAuthzTokens: string[];
    clientHeaders: ClientHeadersConfig;
    getName(): string;
    getDescription(): string;
    getParamSchema(): ZodObject<ZodRawShape>;
    addAuthTokenGetters(newAuthTokenGetters: AuthTokenGetters): ToolboxTool;
    addAuthTokenGetter(authSource: string, getIdToken: AuthTokenGetter): ToolboxTool;
    bindParams(paramsToBind: BoundParams): ToolboxTool;
    bindParam(paramName: string, paramValue: BoundValue): ToolboxTool;
}
/**
 * Creates a callable tool function representing a specific tool on a remote
 * Toolbox server.
 *
 * @param {ITransport} transport - The transport for making API requests.
 * @param {string} name - The name of the remote tool.
 * @param {string} description - A description of the remote tool.
 * @param {ZodObject<any>} paramSchema - The Zod schema for validating the tool's parameters.
 * @param {AuthTokenGetters} [authTokenGetters] - Optional map of auth service names to token getters.
 * @param {RequiredAuthnParams} [requiredAuthnParams] - Optional map of auth params that still need satisfying.
 * @param {string[]} [requiredAuthzTokens] - Optional list of auth tokens that still need satisfying.
 * @param {BoundParams} [boundParams] - Optional parameters to pre-bind to the tool.
 * @param {ClientHeadersConfig} [clientHeaders] - Optional client-specific headers.
 * @returns {ToolboxTool} An async function that, when
 * called, invokes the tool with the provided arguments.
 */
export declare function ToolboxTool(transport: ITransport, name: string, description: string, paramSchema: ZodObject<ZodRawShape>, authTokenGetters?: AuthTokenGetters, requiredAuthnParams?: RequiredAuthnParams, requiredAuthzTokens?: string[], boundParams?: BoundParams, clientHeaders?: ClientHeadersConfig): ToolboxTool;
