/* tslint:disable */
/* eslint-disable */
/**
 * Apideck
 * The Apideck OpenAPI Spec: SDK Optimized
 *
 * The version of the OpenAPI document: 10.13.0
 * Contact: support@apideck.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import {
  Connection,
  ConnectionImportData,
  ConnectionImportDataToJSON,
  ConnectionToJSON,
  Consumer,
  ConsumerRequestCountsInDateRangeResponse,
  ConsumerRequestCountsInDateRangeResponseFromJSON,
  ConsumerToJSON,
  CreateCallbackState,
  CreateCallbackStateResponse,
  CreateCallbackStateResponseFromJSON,
  CreateCallbackStateToJSON,
  CreateConnectionResponse,
  CreateConnectionResponseFromJSON,
  CreateConsumerResponse,
  CreateConsumerResponseFromJSON,
  CreateSessionResponse,
  CreateSessionResponseFromJSON,
  DeleteConsumerResponse,
  DeleteConsumerResponseFromJSON,
  GetConnectionResponse,
  GetConnectionResponseFromJSON,
  GetConnectionsResponse,
  GetConnectionsResponseFromJSON,
  GetConsumerResponse,
  GetConsumerResponseFromJSON,
  GetConsumersResponse,
  GetConsumersResponseFromJSON,
  GetCustomFieldsResponse,
  GetCustomFieldsResponseFromJSON,
  GetCustomMappingsResponse,
  GetCustomMappingsResponseFromJSON,
  GetLogsResponse,
  GetLogsResponseFromJSON,
  LogsFilter,
  Session,
  SessionToJSON,
  UpdateConnectionResponse,
  UpdateConnectionResponseFromJSON,
  UpdateConsumerRequest,
  UpdateConsumerRequestToJSON,
  UpdateConsumerResponse,
  UpdateConsumerResponseFromJSON,
  ValidateConnectionStateResponse,
  ValidateConnectionStateResponseFromJSON
} from '../models'
import * as runtime from '../runtime'

export interface VaultApiConnectionCustomMappingsAllRequest {
  unifiedApi: string
  serviceId: string
  resource: string
  consumerId?: string
  appId?: string
  resourceId?: string
}

export interface VaultApiConnectionSettingsAllRequest {
  unifiedApi: string
  serviceId: string
  resource: string
  consumerId?: string
  appId?: string
}

export interface VaultApiConnectionSettingsUpdateRequest {
  serviceId: string
  unifiedApi: string
  resource: string
  connection: Connection
  consumerId?: string
  appId?: string
}

export interface VaultApiConnectionsAllRequest {
  consumerId?: string
  appId?: string
  api?: string
  configured?: boolean
}

export interface VaultApiConnectionsDeleteRequest {
  serviceId: string
  unifiedApi: string
  consumerId?: string
  appId?: string
}

export interface VaultApiConnectionsImportRequest {
  serviceId: string
  unifiedApi: string
  connection: ConnectionImportData
  consumerId?: string
  appId?: string
}

export interface VaultApiConnectionsOneRequest {
  serviceId: string
  unifiedApi: string
  consumerId?: string
  appId?: string
}

export interface VaultApiConnectionsTokenRequest {
  serviceId: string
  unifiedApi: string
  consumerId?: string
  appId?: string
  body?: object
}

export interface VaultApiConnectionsUpdateRequest {
  serviceId: string
  unifiedApi: string
  connection: Connection
  consumerId?: string
  appId?: string
}

export interface VaultApiConsumerRequestCountsAllRequest {
  consumerId: string
  startDatetime: string
  endDatetime: string
  appId?: string
}

export interface VaultApiConsumersAddRequest {
  consumer: Consumer
  appId?: string
}

export interface VaultApiConsumersAllRequest {
  appId?: string
  cursor?: string | null
  limit?: number
}

export interface VaultApiConsumersDeleteRequest {
  consumerId: string
  appId?: string
}

export interface VaultApiConsumersOneRequest {
  consumerId: string
  appId?: string
}

export interface VaultApiConsumersUpdateRequest {
  consumerId: string
  consumer: UpdateConsumerRequest
  appId?: string
}

export interface VaultApiCreateCallbackStateRequest {
  serviceId: string
  unifiedApi: string
  createCallbackState: CreateCallbackState
  consumerId?: string
  appId?: string
}

export interface VaultApiCustomFieldsAllRequest {
  unifiedApi: string
  serviceId: string
  resource: string
  consumerId?: string
  appId?: string
  resourceId?: string
}

export interface VaultApiCustomMappingsAllRequest {
  unifiedApi: string
  serviceId: string
  consumerId?: string
  appId?: string
}

export interface VaultApiLogsAllRequest {
  appId?: string
  consumerId?: string
  filter?: LogsFilter
  cursor?: string | null
  limit?: number
}

export interface VaultApiSessionsCreateRequest {
  consumerId?: string
  appId?: string
  session?: Session
}

export interface VaultApiValidateConnectionStateRequest {
  serviceId: string
  unifiedApi: string
  consumerId?: string
  appId?: string
  body?: object
}

/**
 *
 */
export class VaultApi extends runtime.BaseAPI {
  /**
   * This endpoint returns a list of custom mappings for a connection.
   * List connection custom mappings
   */
  async connectionCustomMappingsAllRaw(
    requestParameters: VaultApiConnectionCustomMappingsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCustomMappingsResponse>> {
    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionCustomMappingsAll.'
      )
    }

    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionCustomMappingsAll.'
      )
    }

    if (requestParameters.resource === null || requestParameters.resource === undefined) {
      throw new runtime.RequiredError(
        'resource',
        'Required parameter requestParameters.resource was null or undefined when calling connectionCustomMappingsAll.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.resourceId !== undefined) {
      queryParameters['resource_id'] = requestParameters.resourceId
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/{resource}/custom-mappings`
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi)))
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'resource'}}`, encodeURIComponent(String(requestParameters.resource))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetCustomMappingsResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint returns a list of custom mappings for a connection.
   * List connection custom mappings
   */
  async connectionCustomMappingsAll(
    requestParameters: VaultApiConnectionCustomMappingsAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetCustomMappingsResponse> {
    const response = await this.connectionCustomMappingsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint returns custom settings and their defaults required by connection for a given resource.
   * Get resource settings
   */
  async connectionSettingsAllRaw(
    requestParameters: VaultApiConnectionSettingsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetConnectionResponse>> {
    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionSettingsAll.'
      )
    }

    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionSettingsAll.'
      )
    }

    if (requestParameters.resource === null || requestParameters.resource === undefined) {
      throw new runtime.RequiredError(
        'resource',
        'Required parameter requestParameters.resource was null or undefined when calling connectionSettingsAll.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/{resource}/config`
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi)))
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'resource'}}`, encodeURIComponent(String(requestParameters.resource))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetConnectionResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint returns custom settings and their defaults required by connection for a given resource.
   * Get resource settings
   */
  async connectionSettingsAll(
    requestParameters: VaultApiConnectionSettingsAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetConnectionResponse> {
    const response = await this.connectionSettingsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update default values for a connection\'s resource settings
   * Update settings
   */
  async connectionSettingsUpdateRaw(
    requestParameters: VaultApiConnectionSettingsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateConnectionResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionSettingsUpdate.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionSettingsUpdate.'
      )
    }

    if (requestParameters.resource === null || requestParameters.resource === undefined) {
      throw new runtime.RequiredError(
        'resource',
        'Required parameter requestParameters.resource was null or undefined when calling connectionSettingsUpdate.'
      )
    }

    if (requestParameters.connection === null || requestParameters.connection === undefined) {
      throw new runtime.RequiredError(
        'connection',
        'Required parameter requestParameters.connection was null or undefined when calling connectionSettingsUpdate.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/{resource}/config`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi)))
          .replace(`{${'resource'}}`, encodeURIComponent(String(requestParameters.resource))),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: ConnectionToJSON(requestParameters.connection)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateConnectionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update default values for a connection\'s resource settings
   * Update settings
   */
  async connectionSettingsUpdate(
    requestParameters: VaultApiConnectionSettingsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateConnectionResponse> {
    const response = await this.connectionSettingsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint includes all the configured integrations and contains the required assets to build an integrations page where your users can install integrations. OAuth2 supported integrations will contain authorize and revoke links to handle the authentication flows.
   * Get all connections
   */
  async connectionsAllRaw(
    requestParameters: VaultApiConnectionsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetConnectionsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.api !== undefined) {
      queryParameters['api'] = requestParameters.api
    }

    if (requestParameters.configured !== undefined) {
      queryParameters['configured'] = requestParameters.configured
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetConnectionsResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint includes all the configured integrations and contains the required assets to build an integrations page where your users can install integrations. OAuth2 supported integrations will contain authorize and revoke links to handle the authentication flows.
   * Get all connections
   */
  async connectionsAll(
    requestParameters: VaultApiConnectionsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetConnectionsResponse> {
    const response = await this.connectionsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Deletes a connection
   * Deletes a connection
   */
  async connectionsDeleteRaw(
    requestParameters: VaultApiConnectionsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<void>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionsDelete.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionsDelete.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.VoidApiResponse(response)
  }

  /**
   * Deletes a connection
   * Deletes a connection
   */
  async connectionsDelete(
    requestParameters: VaultApiConnectionsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<void> {
    await this.connectionsDeleteRaw(requestParameters, initOverrides)
  }

  /**
   * Import an authorized connection.
   * Import connection
   */
  async connectionsImportRaw(
    requestParameters: VaultApiConnectionsImportRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateConnectionResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionsImport.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionsImport.'
      )
    }

    if (requestParameters.connection === null || requestParameters.connection === undefined) {
      throw new runtime.RequiredError(
        'connection',
        'Required parameter requestParameters.connection was null or undefined when calling connectionsImport.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/import`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: ConnectionImportDataToJSON(requestParameters.connection)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateConnectionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Import an authorized connection.
   * Import connection
   */
  async connectionsImport(
    requestParameters: VaultApiConnectionsImportRequest,
    initOverrides?: RequestInit
  ): Promise<CreateConnectionResponse> {
    const response = await this.connectionsImportRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get a connection
   * Get connection
   */
  async connectionsOneRaw(
    requestParameters: VaultApiConnectionsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetConnectionResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionsOne.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionsOne.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetConnectionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get a connection
   * Get connection
   */
  async connectionsOne(
    requestParameters: VaultApiConnectionsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetConnectionResponse> {
    const response = await this.connectionsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Triggers exchanging persisted connection credentials for an access token and store it in Vault. Currently supported for connections with the `client_credentials` or `password` OAuth grant type.  Note:   - Do not include any credentials in the request body. This operation does not persist changes, but only triggers the exchange of persisted connection credentials for an access token.   - The access token will not be returned in the response. A 200 response code indicates the authorization was successful and that a valid access token was stored on the connection.   - The access token will be used for subsequent API requests.
   * Authorize Access Token
   */
  async connectionsTokenRaw(
    requestParameters: VaultApiConnectionsTokenRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetConnectionResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionsToken.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionsToken.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/token`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: requestParameters.body as any
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetConnectionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Triggers exchanging persisted connection credentials for an access token and store it in Vault. Currently supported for connections with the `client_credentials` or `password` OAuth grant type.  Note:   - Do not include any credentials in the request body. This operation does not persist changes, but only triggers the exchange of persisted connection credentials for an access token.   - The access token will not be returned in the response. A 200 response code indicates the authorization was successful and that a valid access token was stored on the connection.   - The access token will be used for subsequent API requests.
   * Authorize Access Token
   */
  async connectionsToken(
    requestParameters: VaultApiConnectionsTokenRequest,
    initOverrides?: RequestInit
  ): Promise<GetConnectionResponse> {
    const response = await this.connectionsTokenRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update a connection
   * Update connection
   */
  async connectionsUpdateRaw(
    requestParameters: VaultApiConnectionsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateConnectionResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling connectionsUpdate.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling connectionsUpdate.'
      )
    }

    if (requestParameters.connection === null || requestParameters.connection === undefined) {
      throw new runtime.RequiredError(
        'connection',
        'Required parameter requestParameters.connection was null or undefined when calling connectionsUpdate.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: ConnectionToJSON(requestParameters.connection)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateConnectionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update a connection
   * Update connection
   */
  async connectionsUpdate(
    requestParameters: VaultApiConnectionsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateConnectionResponse> {
    const response = await this.connectionsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get consumer request counts within a given datetime range.
   * Consumer request counts
   */
  async consumerRequestCountsAllRaw(
    requestParameters: VaultApiConsumerRequestCountsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<ConsumerRequestCountsInDateRangeResponse>> {
    if (requestParameters.consumerId === null || requestParameters.consumerId === undefined) {
      throw new runtime.RequiredError(
        'consumerId',
        'Required parameter requestParameters.consumerId was null or undefined when calling consumerRequestCountsAll.'
      )
    }

    if (requestParameters.startDatetime === null || requestParameters.startDatetime === undefined) {
      throw new runtime.RequiredError(
        'startDatetime',
        'Required parameter requestParameters.startDatetime was null or undefined when calling consumerRequestCountsAll.'
      )
    }

    if (requestParameters.endDatetime === null || requestParameters.endDatetime === undefined) {
      throw new runtime.RequiredError(
        'endDatetime',
        'Required parameter requestParameters.endDatetime was null or undefined when calling consumerRequestCountsAll.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.startDatetime !== undefined) {
      queryParameters['start_datetime'] = requestParameters.startDatetime
    }

    if (requestParameters.endDatetime !== undefined) {
      queryParameters['end_datetime'] = requestParameters.endDatetime
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/consumers/{consumer_id}/stats`.replace(
          `{${'consumer_id'}}`,
          encodeURIComponent(String(requestParameters.consumerId))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      ConsumerRequestCountsInDateRangeResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get consumer request counts within a given datetime range.
   * Consumer request counts
   */
  async consumerRequestCountsAll(
    requestParameters: VaultApiConsumerRequestCountsAllRequest,
    initOverrides?: RequestInit
  ): Promise<ConsumerRequestCountsInDateRangeResponse> {
    const response = await this.consumerRequestCountsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create a consumer
   * Create consumer
   */
  async consumersAddRaw(
    requestParameters: VaultApiConsumersAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateConsumerResponse>> {
    if (requestParameters.consumer === null || requestParameters.consumer === undefined) {
      throw new runtime.RequiredError(
        'consumer',
        'Required parameter requestParameters.consumer was null or undefined when calling consumersAdd.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/consumers`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: ConsumerToJSON(requestParameters.consumer)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateConsumerResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create a consumer
   * Create consumer
   */
  async consumersAdd(
    requestParameters: VaultApiConsumersAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateConsumerResponse> {
    const response = await this.consumersAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint includes all application consumers, along with an aggregated count of requests made.
   * Get all consumers
   */
  async consumersAllRaw(
    requestParameters: VaultApiConsumersAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetConsumersResponse>> {
    const queryParameters: any = {}

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/consumers`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetConsumersResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint includes all application consumers, along with an aggregated count of requests made.
   * Get all consumers
   */
  async consumersAll(
    requestParameters: VaultApiConsumersAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetConsumersResponse> {
    const response = await this.consumersAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete consumer and all their connections, including credentials.
   * Delete consumer
   */
  async consumersDeleteRaw(
    requestParameters: VaultApiConsumersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteConsumerResponse>> {
    if (requestParameters.consumerId === null || requestParameters.consumerId === undefined) {
      throw new runtime.RequiredError(
        'consumerId',
        'Required parameter requestParameters.consumerId was null or undefined when calling consumersDelete.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/consumers/{consumer_id}`.replace(
          `{${'consumer_id'}}`,
          encodeURIComponent(String(requestParameters.consumerId))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteConsumerResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete consumer and all their connections, including credentials.
   * Delete consumer
   */
  async consumersDelete(
    requestParameters: VaultApiConsumersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteConsumerResponse> {
    const response = await this.consumersDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Consumer detail including their aggregated counts with the connections they have authorized.
   * Get consumer
   */
  async consumersOneRaw(
    requestParameters: VaultApiConsumersOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetConsumerResponse>> {
    if (requestParameters.consumerId === null || requestParameters.consumerId === undefined) {
      throw new runtime.RequiredError(
        'consumerId',
        'Required parameter requestParameters.consumerId was null or undefined when calling consumersOne.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/consumers/{consumer_id}`.replace(
          `{${'consumer_id'}}`,
          encodeURIComponent(String(requestParameters.consumerId))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetConsumerResponseFromJSON(jsonValue)
    )
  }

  /**
   * Consumer detail including their aggregated counts with the connections they have authorized.
   * Get consumer
   */
  async consumersOne(
    requestParameters: VaultApiConsumersOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetConsumerResponse> {
    const response = await this.consumersOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update consumer metadata such as name and email.
   * Update consumer
   */
  async consumersUpdateRaw(
    requestParameters: VaultApiConsumersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateConsumerResponse>> {
    if (requestParameters.consumerId === null || requestParameters.consumerId === undefined) {
      throw new runtime.RequiredError(
        'consumerId',
        'Required parameter requestParameters.consumerId was null or undefined when calling consumersUpdate.'
      )
    }

    if (requestParameters.consumer === null || requestParameters.consumer === undefined) {
      throw new runtime.RequiredError(
        'consumer',
        'Required parameter requestParameters.consumer was null or undefined when calling consumersUpdate.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/consumers/{consumer_id}`.replace(
          `{${'consumer_id'}}`,
          encodeURIComponent(String(requestParameters.consumerId))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: UpdateConsumerRequestToJSON(requestParameters.consumer)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateConsumerResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update consumer metadata such as name and email.
   * Update consumer
   */
  async consumersUpdate(
    requestParameters: VaultApiConsumersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateConsumerResponse> {
    const response = await this.consumersUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint creates a callback state that can be used to issue requests to the callback endpoint.
   * Create Callback State
   */
  async createCallbackStateRaw(
    requestParameters: VaultApiCreateCallbackStateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateCallbackStateResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling createCallbackState.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling createCallbackState.'
      )
    }

    if (
      requestParameters.createCallbackState === null ||
      requestParameters.createCallbackState === undefined
    ) {
      throw new runtime.RequiredError(
        'createCallbackState',
        'Required parameter requestParameters.createCallbackState was null or undefined when calling createCallbackState.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/callback-state`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CreateCallbackStateToJSON(requestParameters.createCallbackState)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateCallbackStateResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint creates a callback state that can be used to issue requests to the callback endpoint.
   * Create Callback State
   */
  async createCallbackState(
    requestParameters: VaultApiCreateCallbackStateRequest,
    initOverrides?: RequestInit
  ): Promise<CreateCallbackStateResponse> {
    const response = await this.createCallbackStateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint returns an custom fields on a connection resource.
   * Get resource custom fields
   */
  async customFieldsAllRaw(
    requestParameters: VaultApiCustomFieldsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCustomFieldsResponse>> {
    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling customFieldsAll.'
      )
    }

    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling customFieldsAll.'
      )
    }

    if (requestParameters.resource === null || requestParameters.resource === undefined) {
      throw new runtime.RequiredError(
        'resource',
        'Required parameter requestParameters.resource was null or undefined when calling customFieldsAll.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.resourceId !== undefined) {
      queryParameters['resource_id'] = requestParameters.resourceId
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/{resource}/custom-fields`
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi)))
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'resource'}}`, encodeURIComponent(String(requestParameters.resource))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetCustomFieldsResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint returns an custom fields on a connection resource.
   * Get resource custom fields
   */
  async customFieldsAll(
    requestParameters: VaultApiCustomFieldsAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetCustomFieldsResponse> {
    const response = await this.customFieldsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint returns a list of custom mappings.
   * List custom mappings
   */
  async customMappingsAllRaw(
    requestParameters: VaultApiCustomMappingsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCustomMappingsResponse>> {
    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling customMappingsAll.'
      )
    }

    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling customMappingsAll.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/custom-mappings/{unified_api}/{service_id}`
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi)))
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetCustomMappingsResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint returns a list of custom mappings.
   * List custom mappings
   */
  async customMappingsAll(
    requestParameters: VaultApiCustomMappingsAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetCustomMappingsResponse> {
    const response = await this.customMappingsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint includes all consumer request logs.
   * Get all consumer request logs
   */
  async logsAllRaw(
    requestParameters: VaultApiLogsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetLogsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/logs`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetLogsResponseFromJSON(jsonValue))
  }

  /**
   * This endpoint includes all consumer request logs.
   * Get all consumer request logs
   */
  async logsAll(
    requestParameters: VaultApiLogsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetLogsResponse> {
    const response = await this.logsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Making a POST request to this endpoint will initiate a Hosted Vault session. Redirect the consumer to the returned URL to allow temporary access to manage their integrations and settings.  Note: This is a short lived token that will expire after 1 hour (TTL: 3600).
   * Create Session
   */
  async sessionsCreateRaw(
    requestParameters: VaultApiSessionsCreateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateSessionResponse>> {
    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/sessions`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: SessionToJSON(requestParameters.session)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateSessionResponseFromJSON(jsonValue)
    )
  }

  /**
   * Making a POST request to this endpoint will initiate a Hosted Vault session. Redirect the consumer to the returned URL to allow temporary access to manage their integrations and settings.  Note: This is a short lived token that will expire after 1 hour (TTL: 3600).
   * Create Session
   */
  async sessionsCreate(
    requestParameters: VaultApiSessionsCreateRequest = {},
    initOverrides?: RequestInit
  ): Promise<CreateSessionResponse> {
    const response = await this.sessionsCreateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * This endpoint validates the current state of a given connection. This will perform different checks based on the connection auth type. For basic and apiKey auth types, the presence of required fields is checked. For connectors that implement OAuth2, this operation forces the refresh flow for an access token regardless of its expiry.  Note:   - Do not include any credentials in the request body. This operation does not persist changes, but only triggers the validation of connection state.   - If a refresh token flow was performed and successful, the new access token will then be used for subsequent API requests.
   * Validate Connection State
   */
  async validateConnectionStateRaw(
    requestParameters: VaultApiValidateConnectionStateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<ValidateConnectionStateResponse>> {
    if (requestParameters.serviceId === null || requestParameters.serviceId === undefined) {
      throw new runtime.RequiredError(
        'serviceId',
        'Required parameter requestParameters.serviceId was null or undefined when calling validateConnectionState.'
      )
    }

    if (requestParameters.unifiedApi === null || requestParameters.unifiedApi === undefined) {
      throw new runtime.RequiredError(
        'unifiedApi',
        'Required parameter requestParameters.unifiedApi was null or undefined when calling validateConnectionState.'
      )
    }

    const queryParameters: any = {}

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/vault/connections/{unified_api}/{service_id}/validate`
          .replace(`{${'service_id'}}`, encodeURIComponent(String(requestParameters.serviceId)))
          .replace(`{${'unified_api'}}`, encodeURIComponent(String(requestParameters.unifiedApi))),
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: requestParameters.body as any
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      ValidateConnectionStateResponseFromJSON(jsonValue)
    )
  }

  /**
   * This endpoint validates the current state of a given connection. This will perform different checks based on the connection auth type. For basic and apiKey auth types, the presence of required fields is checked. For connectors that implement OAuth2, this operation forces the refresh flow for an access token regardless of its expiry.  Note:   - Do not include any credentials in the request body. This operation does not persist changes, but only triggers the validation of connection state.   - If a refresh token flow was performed and successful, the new access token will then be used for subsequent API requests.
   * Validate Connection State
   */
  async validateConnectionState(
    requestParameters: VaultApiValidateConnectionStateRequest,
    initOverrides?: RequestInit
  ): Promise<ValidateConnectionStateResponse> {
    const response = await this.validateConnectionStateRaw(requestParameters, initOverrides)
    return await response.value()
  }
}
