# Magic Admin Elixir SDK

The Magic Admin Elixir SDK provides convenient ways for developers to interact with
Magic API endpoints and an array of utilities to handle DID Token.

Additional documentation can be found at [](

## Installation

The package can be installed by adding `magic_admin` to your list of dependencies in `mix.exs`:

def deps do
    {:magic_admin, "~> 0.8.0"}

## Configuration

To make API calls, it is necessary to configure your Magic secret key.

use Mix.Config

config :magic_admin, secret_key: System.get_env("MAGIC_SECRET")
# OR
config :magic_admin, secret_key: "sk_live_XXXXXXXXXXX"

## Usage

### Tokens

#### Validate Tokens

The `Token.validate/1` function returns `:ok` if the token is valid, or an error tuple
with a message describing why the token is invalid.

:ok = Magic.Token.validate(did_token)
{:error, {:did_token_error, message}} = Magic.Token.validate(invalid_did_token)

The `Token.validate!/1` function returns `true` if the token is valid, or raises a
`DIDTokenError` with a message describing why the token is invalid.

true = Magic.Token.validate!(did_token)

#### Decode Tokens

The `Token.decode/1` function returns a map of `proof`, `claim` and `message`, or an error
tuple if it is malformed. `claim` is the parsed map of claims made by the decoded
token. `proof` is the secp256k1 signature over a hash of `message` which is the JSON
encoded version of `claim`.

{:ok, %{proof: proof, claim: claim, message: message}} = Magic.Token.decode(did_token)
{:error, {:did_token_error, message}} = Magic.Token.decode(invalid_did_token)

The `Token.decode!/1` function returns a map of `proof`, `claim` and `message`, or raises
a `DIDTokenError` if it is malformed.

%{proof: proof, claim: claim, message: message} = Magic.Token.decode!(did_token)

#### Get Token Attributes

The `Token` module also includes a couple of utility functions for accessing the issuer
and public address attributes of a token.

issuer = Magic.Token.get_issuer(did_token)
address = Magic.Token.get_public_address(did_token)

### Users

#### Get User Metadata

Metadata for a user can be retrieved by supplying issuer, public key, or the full DID Token:

# => {:ok, %{email: "", issuer: "did:ethr:0x00000000000000000000000000000", public_address: "0x00000000000000000000000000000000"}}

#### Log Out a User

Logs a user out of all Magic SDK sessions by the supplied issuer, public address, or the full DID Token:


## Attribution

This Elixir library is based on the official Ruby implementation: