/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 * @generated-id: 2dda252d574b
 */

import { betaConnectorsCallTool } from "../funcs/betaConnectorsCallTool.js";
import { betaConnectorsCreate } from "../funcs/betaConnectorsCreate.js";
import { betaConnectorsDelete } from "../funcs/betaConnectorsDelete.js";
import { betaConnectorsGet } from "../funcs/betaConnectorsGet.js";
import { betaConnectorsList } from "../funcs/betaConnectorsList.js";
import { betaConnectorsUpdate } from "../funcs/betaConnectorsUpdate.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import * as components from "../models/components/index.js";
import * as operations from "../models/operations/index.js";
import { unwrapAsync } from "../types/fp.js";

export class Connectors extends ClientSDK {
  /**
   * Create a new connector.
   *
   * @remarks
   * Create a new MCP connector. You can customize its visibility, url and auth type.
   */
  async create(
    request: components.ConnectorMCPCreate,
    options?: RequestOptions,
  ): Promise<components.Connector> {
    return unwrapAsync(betaConnectorsCreate(
      this,
      request,
      options,
    ));
  }

  /**
   * List all connectors.
   *
   * @remarks
   * List all your custom connectors with keyset pagination and filters.
   */
  async list(
    request?: operations.ConnectorListV1Request | undefined,
    options?: RequestOptions,
  ): Promise<components.PaginatedConnectors> {
    return unwrapAsync(betaConnectorsList(
      this,
      request,
      options,
    ));
  }

  /**
   * Call Connector Tool
   *
   * @remarks
   * Call a tool on an MCP connector.
   */
  async callTool(
    request: operations.ConnectorCallToolV1Request,
    options?: RequestOptions,
  ): Promise<components.MCPToolCallResponse> {
    return unwrapAsync(betaConnectorsCallTool(
      this,
      request,
      options,
    ));
  }

  /**
   * Get a connector.
   *
   * @remarks
   * Get a connector by its ID or name.
   */
  async get(
    request: operations.ConnectorGetV1Request,
    options?: RequestOptions,
  ): Promise<components.Connector> {
    return unwrapAsync(betaConnectorsGet(
      this,
      request,
      options,
    ));
  }

  /**
   * Update a connector.
   *
   * @remarks
   * Update a connector by its ID.
   */
  async update(
    request: operations.ConnectorUpdateV1Request,
    options?: RequestOptions,
  ): Promise<components.Connector> {
    return unwrapAsync(betaConnectorsUpdate(
      this,
      request,
      options,
    ));
  }

  /**
   * Delete a connector.
   *
   * @remarks
   * Delete a connector by its ID.
   */
  async delete(
    request: operations.ConnectorDeleteV1Request,
    options?: RequestOptions,
  ): Promise<components.MessageResponse> {
    return unwrapAsync(betaConnectorsDelete(
      this,
      request,
      options,
    ));
  }
}
