defmodule Magic.User do
@moduledoc """
Provides methods to interact with the User via the Magic API
"""
alias Magic.Token
@type issuer :: Token.issuer()
@type public_address :: Token.public_address()
@type did_token :: Token.did_token()
@type user :: %{email: String.t(), issuer: issuer, public_address: public_address}
@doc """
Retrieves information about the user by the supplied issuer
"""
@spec get_metadata_by_issuer(issuer) :: {:ok, user} | {:error, String.t()}
def get_metadata_by_issuer(issuer, opts \\ []) do
Magic.API.get_user(issuer, opts)
end
@doc """
Retrieves information about the user by the supplied public address
"""
@spec get_metadata_by_public_address(public_address) :: {:ok, user} | {:error, String.t()}
def get_metadata_by_public_address(public_address, opts \\ []) do
issuer = Token.construct_issuer_with_public_address(public_address)
get_metadata_by_issuer(issuer, opts)
end
@doc """
Retrieves information about the user by the supplied DID Token
"""
@spec get_metadata_by_token(did_token) :: {:ok, user} | {:error, String.t()}
def get_metadata_by_token(did_token, opts \\ []) do
issuer = Token.get_issuer(did_token)
get_metadata_by_issuer(issuer, opts)
end
@doc """
Logs a user out of all Magic SDK sessions by the supplied issuer
"""
@spec logout_by_issuer(issuer) :: {:ok, %{}} | {:error, String.t()}
def logout_by_issuer(issuer, opts \\ []) do
Magic.API.logout_user(issuer, opts)
end
@doc """
Logs a user out of all Magic SDK sessions by the supplied public address
"""
@spec logout_by_public_address(public_address) :: {:ok, %{}} | {:error, String.t()}
def logout_by_public_address(public_address, opts \\ []) do
issuer = Token.construct_issuer_with_public_address(public_address)
logout_by_issuer(issuer, opts)
end
@doc """
Logs a user out of all Magic SDK sessions by the supplied DID Token
"""
@spec logout_by_token(did_token) :: {:ok, %{}} | {:error, String.t()}
def logout_by_token(did_token, opts \\ []) do
issuer = Token.get_issuer(did_token)
logout_by_issuer(issuer, opts)
end
end