lib/spatio/api/account.ex

# NOTE: This file is auto generated by OpenAPI Generator 7.22.0 (https://openapi-generator.tech).
# Do not edit this file manually.

defmodule Spatio.Api.Account do
  @moduledoc """
  API calls for all endpoints tagged `Account`.
  """

  alias Spatio.Connection
  import Spatio.RequestBuilder

  @doc """
  Change or set the account password.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `change_password_request` (ChangePasswordRequest): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec change_password(Tesla.Env.client, Spatio.Model.ChangePasswordRequest.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def change_password(connection, change_password_request, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/account/security/password")
      |> add_param(:body, :body, change_password_request)
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {400, Spatio.Model.ApiError},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Atomic check + increment on the agent-task counter (one slot per turn).

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.ConsumeAgentTaskResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec consume_agent_task(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.ConsumeAgentTaskResponse.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def consume_agent_task(connection, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/account/usage/consume-agent-task")
      |> ensure_body()
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.ConsumeAgentTaskResponse},
      {401, Spatio.Model.ApiError},
      {402, Spatio.Model.ApiError},
      {429, Spatio.Model.ApiError}
    ])
  end

  @doc """
  The caller's subscription tier and status.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.AccountPlan.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_account_plan(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.AccountPlan.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def get_account_plan(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/plan")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.AccountPlan},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Capability + quota envelope for the caller's tier.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.AccountTierDetails.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_account_tier(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.AccountTierDetails.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def get_account_tier(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/tier")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.AccountTierDetails},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Today's usage counters across notes, sheets, slides, files, tasks, mail, API.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.AccountUsage.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_account_usage(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.AccountUsage.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def get_account_usage(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/usage")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.AccountUsage},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Free-trial agent-task counter snapshot. Read-only; does NOT consume a slot. Use POST `/v1/account/usage/consume-agent-task` atomically per turn to gate a tool-using turn. 

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.AgentTaskUsage.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_agent_task_usage(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.AgentTaskUsage.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def get_agent_task_usage(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/usage/agent-tasks")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.AgentTaskUsage},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List the linked sign-in methods (password + OAuth providers).

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.SignInMethods.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec get_sign_in_methods(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.SignInMethods.t} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def get_sign_in_methods(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/security/sign-in-methods")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.SignInMethods},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  List the OAuth clients the calling user has granted access to.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.ConnectedAppsListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_connected_apps(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.ConnectedAppsListResponse.t} | {:error, Tesla.Env.t}
  def list_connected_apps(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/connected-apps")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.ConnectedAppsListResponse}
    ])
  end

  @doc """
  List active sessions for the caller.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.SessionListResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec list_sessions(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.SessionListResponse.t} | {:error, Tesla.Env.t}
  def list_sessions(connection, _opts \\ []) do
    request =
      %{}
      |> method(:get)
      |> url("/v1/account/security/sessions")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.SessionListResponse},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Revoke a connected app and all of its active tokens.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `client_id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec revoke_connected_app(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:error, Tesla.Env.t}
  def revoke_connected_app(connection, client_id, _opts \\ []) do
    request =
      %{}
      |> method(:delete)
      |> url("/v1/account/connected-apps/#{client_id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, false},
      {404, false}
    ])
  end

  @doc """
  Revoke every session except the caller's current one.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, Spatio.Model.RevokeOtherSessionsResponse.t}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec revoke_other_sessions(Tesla.Env.client, keyword()) :: {:ok, Spatio.Model.ApiError.t} | {:ok, Spatio.Model.RevokeOtherSessionsResponse.t} | {:error, Tesla.Env.t}
  def revoke_other_sessions(connection, _opts \\ []) do
    request =
      %{}
      |> method(:post)
      |> url("/v1/account/security/sessions/revoke-others")
      |> ensure_body()
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {200, Spatio.Model.RevokeOtherSessionsResponse},
      {401, Spatio.Model.ApiError}
    ])
  end

  @doc """
  Revoke a specific session.

  ### Parameters

  - `connection` (Spatio.Connection): Connection to server
  - `id` (String.t): 
  - `opts` (keyword): Optional parameters

  ### Returns

  - `{:ok, nil}` on success
  - `{:error, Tesla.Env.t}` on failure
  """
  @spec revoke_session(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:ok, Spatio.Model.ApiError.t} | {:error, Tesla.Env.t}
  def revoke_session(connection, id, _opts \\ []) do
    request =
      %{}
      |> method(:delete)
      |> url("/v1/account/security/sessions/#{id}")
      |> Enum.into([])

    connection
    |> Connection.request(request)
    |> evaluate_response([
      {204, false},
      {401, Spatio.Model.ApiError},
      {404, Spatio.Model.ApiError}
    ])
  end
end