/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import { connectCreateConnector } from "../funcs/connectCreateConnector.js";
import { connectCreateConnectorAuthorizationRequest } from "../funcs/connectCreateConnectorAuthorizationRequest.js";
import { connectGetConnectorToken } from "../funcs/connectGetConnectorToken.js";
import { ClientSDK, RequestOptions } from "../lib/sdks.js";
import {
  CreateConnectorAuthorizationRequestRequest,
  CreateConnectorAuthorizationRequestResponseBody,
} from "../models/createconnectorauthorizationrequestop.js";
import {
  CreateConnectorRequestBody,
  CreateConnectorResponseBody,
} from "../models/createconnectorop.js";
import {
  GetConnectorTokenRequest,
  GetConnectorTokenResponseBody,
} from "../models/getconnectortokenop.js";
import { unwrapAsync } from "../types/fp.js";

export class Connect extends ClientSDK {
  /**
   * Create a connector
   *
   * @remarks
   * Create a connector from type-specific configuration and optionally link it to a project during creation.
   */
  async createConnector(
    request?: CreateConnectorRequestBody | undefined,
    options?: RequestOptions,
  ): Promise<CreateConnectorResponseBody> {
    return unwrapAsync(connectCreateConnector(
      this,
      request,
      options,
    ));
  }

  /**
   * Get a Connect token
   *
   * @remarks
   * Get an access token for a connector identified by the path parameter and scoped to the requester.
   */
  async getConnectorToken(
    request: GetConnectorTokenRequest,
    options?: RequestOptions,
  ): Promise<GetConnectorTokenResponseBody> {
    return unwrapAsync(connectGetConnectorToken(
      this,
      request,
      options,
    ));
  }

  /**
   * Create a Connect authorization request
   *
   * @remarks
   * Create an authorization request for a connector and return the URL and verifier details needed to complete the flow.
   */
  async createConnectorAuthorizationRequest(
    request: CreateConnectorAuthorizationRequestRequest,
    options?: RequestOptions,
  ): Promise<CreateConnectorAuthorizationRequestResponseBody> {
    return unwrapAsync(connectCreateConnectorAuthorizationRequest(
      this,
      request,
      options,
    ));
  }
}
