import type { BaseClientOptions, BaseRequestOptions } from "../../../../BaseClient.mjs";
import { type NormalizedClientOptionsWithAuth } from "../../../../BaseClient.mjs";
import * as core from "../../../../core/index.mjs";
import * as Phonic from "../../../index.mjs";
export declare namespace ToolsClient {
    type Options = BaseClientOptions;
    interface RequestOptions extends BaseRequestOptions {
    }
}
export declare class ToolsClient {
    protected readonly _options: NormalizedClientOptionsWithAuth<ToolsClient.Options>;
    constructor(options?: ToolsClient.Options);
    /**
     * Returns all custom tools for the organization.
     *
     * @param {Phonic.ToolsListRequest} request
     * @param {ToolsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Phonic.NotFoundError}
     *
     * @example
     *     await client.tools.list({
     *         project: "main"
     *     })
     */
    list(request?: Phonic.ToolsListRequest, requestOptions?: ToolsClient.RequestOptions): core.HttpResponsePromise<Phonic.ToolsListResponse>;
    private __list;
    /**
     * Creates a new tool in a project.
     *
     * @param {Phonic.CreateToolRequest} request
     * @param {ToolsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Phonic.BadRequestError}
     * @throws {@link Phonic.ForbiddenError}
     * @throws {@link Phonic.ConflictError}
     *
     * @example
     *     await client.tools.create({
     *         project: "main",
     *         name: "context_printer",
     *         description: "Gets the specific context for fixing our printer",
     *         type: "custom_context",
     *         execution_mode: "sync",
     *         parameters: [{
     *                 type: "string",
     *                 name: "name",
     *                 description: "description",
     *                 is_required: true
     *             }],
     *         require_speech_before_tool_call: false,
     *         forbid_speech_after_tool_call: false,
     *         allow_tool_chaining: true,
     *         context: "Press the A button 5 times then gently shake the printer."
     *     })
     *
     * @example
     *     await client.tools.create({
     *         project: "main",
     *         name: "book_appointment",
     *         description: "Books an appointment in the calendar system",
     *         type: "custom_webhook",
     *         execution_mode: "sync",
     *         parameters: [{
     *                 type: "string",
     *                 name: "date",
     *                 description: "The date for the appointment in YYYY-MM-DD format",
     *                 is_required: true,
     *                 location: "request_body"
     *             }, {
     *                 type: "string",
     *                 name: "time",
     *                 description: "The time for the appointment in HH:MM format",
     *                 is_required: true,
     *                 location: "request_body"
     *             }],
     *         endpoint_method: "POST",
     *         endpoint_url: "https://api.example.com/book-appointment",
     *         endpoint_headers: {
     *             "Authorization": "Bearer token123",
     *             "Content-Type": "application/json"
     *         },
     *         endpoint_timeout_ms: 5000,
     *         require_speech_before_tool_call: false,
     *         wait_for_speech_before_tool_call: false,
     *         forbid_speech_after_tool_call: false,
     *         allow_tool_chaining: true
     *     })
     *
     * @example
     *     await client.tools.create({
     *         project: "main",
     *         name: "check_inventory",
     *         description: "Checks product inventory levels",
     *         type: "custom_websocket",
     *         execution_mode: "async",
     *         parameters: [{
     *                 type: "string",
     *                 name: "product_id",
     *                 description: "The product ID to check",
     *                 is_required: true
     *             }],
     *         tool_call_output_timeout_ms: 5000,
     *         require_speech_before_tool_call: false,
     *         wait_for_speech_before_tool_call: false,
     *         forbid_speech_after_tool_call: false,
     *         allow_tool_chaining: true,
     *         wait_for_response: false
     *     })
     *
     * @example
     *     await client.tools.create({
     *         project: "main",
     *         name: "transfer_to_support",
     *         description: "Transfers the caller to the support team",
     *         type: "built_in_transfer_to_phone_number",
     *         execution_mode: "sync",
     *         phone_number: "+15551234567",
     *         dtmf: "1234",
     *         dynamic_dtmf: false,
     *         use_agent_phone_number: true,
     *         detect_voicemail: false,
     *         require_speech_before_tool_call: false
     *     })
     *
     * @example
     *     await client.tools.create({
     *         project: "main",
     *         name: "transfer_to_specialist",
     *         description: "Transfers the caller to a specialist agent",
     *         type: "built_in_transfer_to_agent",
     *         execution_mode: "sync",
     *         agents_to_transfer_to: ["sales-agent", "support-agent", "technical-agent"],
     *         require_speech_before_tool_call: false
     *     })
     */
    create(request: Phonic.CreateToolRequest, requestOptions?: ToolsClient.RequestOptions): core.HttpResponsePromise<Phonic.ToolsCreateResponse>;
    private __create;
    /**
     * Returns a tool by name or ID.
     *
     * @param {string} nameOrId - The name or the ID of the tool to get.
     * @param {Phonic.ToolsGetRequest} request
     * @param {ToolsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Phonic.ForbiddenError}
     * @throws {@link Phonic.NotFoundError}
     *
     * @example
     *     await client.tools.get("nameOrId", {
     *         project: "main"
     *     })
     */
    get(nameOrId: string, request?: Phonic.ToolsGetRequest, requestOptions?: ToolsClient.RequestOptions): core.HttpResponsePromise<Phonic.ToolsGetResponse>;
    private __get;
    /**
     * Deletes a tool by name or ID.
     *
     * @param {string} nameOrId - The name or the ID of the tool to delete.
     * @param {Phonic.ToolsDeleteRequest} request
     * @param {ToolsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Phonic.NotFoundError}
     *
     * @example
     *     await client.tools.delete("nameOrId", {
     *         project: "main"
     *     })
     */
    delete(nameOrId: string, request?: Phonic.ToolsDeleteRequest, requestOptions?: ToolsClient.RequestOptions): core.HttpResponsePromise<Phonic.ToolsDeleteResponse>;
    private __delete;
    /**
     * Updates a tool by name or ID.
     *
     * @param {string} nameOrId - The name or the ID of the tool to update.
     * @param {Phonic.UpdateToolRequest} request
     * @param {ToolsClient.RequestOptions} requestOptions - Request-specific configuration.
     *
     * @throws {@link Phonic.BadRequestError}
     * @throws {@link Phonic.NotFoundError}
     * @throws {@link Phonic.ConflictError}
     *
     * @example
     *     await client.tools.update("nameOrId", {
     *         project: "main",
     *         description: "Updated description for booking appointments with enhanced features",
     *         endpoint_headers: {
     *             "Authorization": "Bearer updated_token456"
     *         },
     *         endpoint_timeout_ms: 7000
     *     })
     */
    update(nameOrId: string, request?: Phonic.UpdateToolRequest, requestOptions?: ToolsClient.RequestOptions): core.HttpResponsePromise<Phonic.ToolsUpdateResponse>;
    private __update;
}
