lib/openagents/tools/github_context.ex

58e6347eeb72 · 852 B

defmodule OpenAgents.Tools.GitHubContext do
  @moduledoc false

  alias OpenAgents.Accounts
  alias OpenAgents.Accounts.User
  alias OpenAgents.Conversations.Visitor
  alias OpenAgents.Repo
  alias OpenAgents.Tools.ExecutionContext

  @doc "Resolves the signed-in owner's GitHub token. The token never leaves the server."
  def resolve(%ExecutionContext{owner_visitor_id: visitor_id}) when is_binary(visitor_id) do
    with {:ok, _id} <- Ecto.UUID.cast(visitor_id),
         %Visitor{user_id: user_id} when is_binary(user_id) <- Repo.get(Visitor, visitor_id),
         %User{status: "active"} = user <- Repo.get(User, user_id),
         {:ok, token} <- Accounts.github_token(user) do
      {:ok, token, user}
    else
      _unavailable -> {:error, :github_not_connected}
    end
  end

  def resolve(_context), do: {:error, :github_not_connected}
end