Ruby API Reference

Ruby API Reference

#Overview

The Magic Gem for Ruby is your entry-point to secure, passwordless authentication for your application. This guide will cover some important topics for getting started with the magic-admin gem and to make the most of Magic's features.

#Getting Started

The Magic class is the entry-point to the Magic SDK. It must be instantiated with a Magic secret key.

#Installation

Bash
01gem install magic-admin

#Constructor

#Magic

Parameter

Type

Definition

api_secret_key

str

Your secret API Key retrieved from the Magic Dashboard.

retries?

num

Total number of retries to allow.

timeout?

num

A period of time the request is going to wait for a response.

backoff_factor?

num

A backoff factor to apply between retry attempts.

#Initialization

Initialize Magic instance.

Rb
01require 'magic-admin'
02
03magic = Magic.new(api_secret_key: '<SECRET_API_KEY>',
04        retries: 5,
05        timeout: 5,
06        backoff: 0.01)
07
08# Or add environment variables
09# `MAGIC_API_SECRET_KEY`
10# `MAGIC_API_RETRIES`
11# `MAGIC_API_TIMEOUT`
12# `MAGIC_API_BACKOFF`
13
14magic = Magic.new

#Token Resource

The token resource and its methods are accessible on the Magic instance by the token attribute. It provides methods to interact with the DID Token.

note

The token resource does not make any API calls to the Magic server.

Ruby
01require 'magic-admin'
02
03magic = Magic.new(api_secret_key: '<SECRET_API_KEY>')
04magic.token
05magic.token.get_issuer
06magic.token.get_public_address
07magic.token.decode
08magic.token.validate

#get_issuer

Extracts the iss from the DID Token.

Ruby
01token.get_issuer(did_token)

#Arguments

  • did_token (str): A DID Token generated by a Magic User on the client-side

#Raises

  • DIDTokenError if the given DID Token is malformed

#Returns

  • A Decentralized ID (iss) of the Magic user who generated the DID Token

#get_public_address

Gets the cryptographic public address of the Magic User who generated the supplied DID Token.

Ruby
01token.get_public_address(did_token)

#Arguments

  • did_token (str): A DID Token generated by a Magic user on the client-side

#Raises

  • DIDTokenError if the given DID Token is malformed

#Returns

  • A public address of the Magic User who generated the DID Token. Currently, this value is associated with the Ethereum blockchain.

#decode

Decodes a DID Token from a Base64 string into a tuple of its individual components: proof and claim. This method allows you decode the DID Token and inspect the token. You can apply your own rules and validations on top of the current token.validate method.

Ruby
01Token.decode(did_token)

#Arguments

  • did_token (str): A DID Token generated by a Magic user on the client-side

#Raises

  • DIDTokenError if the given DID Token is malformed

#Returns

  • proof (str): A digital signature that proves the validity of the given claim
  • claim (dict): Unsigned data the user asserts. This should equal the proof after Elliptic Curve recovery. See Decentralized ID Token Specification for fields inside the claim.

#validate

Validates a DID token.

Ruby
01token.validate(did_token)

#Arguments

  • did_token (str): A DID Token generated by a Magic user on the client-side

#Raises

  • DIDTokenError if the given DID Token is invalid or malformed

#Returns

  • boolean value indicating the validity of the token

#User Resource

The user resource and its methods are accessible on the Magic instance by the user attribute. It provides methods to interact with the User.

Ruby
01require 'magic-admin'
02
03magic = Magic.new(api_secret_key: '<SECRET_API_KEY>')
04
05magic.user
06magic.user.get_metadata_by_issuer
07magic.user.get_metadata_by_public_address
08magic.user.get_metadata_by_token
09magic.user.logout_by_issuer
10magic.user.logout_by_public_address
11magic.user.logout_by_token

#get_metadata_by_issuer

Retrieves information about the user by the supplied iss from the DID Token. This method is useful if you store the iss with your user data, which is recommended.

01user.get_metadata_by_issuer(issuer)

#Arguments

  • issuer (str): The user's Decentralized ID, which can be parsed using token.get_issuer

#Raises

  • RateLimitingError: If you have sent too many requests within a given period of time
  • BadRequestError: If the supplied parameters are invalid
  • AuthenticationError: If your API secret key cannot be authenticated with Magic API server
  • ForbiddenError: If your API secret key is not authorized to access the resources
  • APIError: For any other API error
  • APIConnectionError: If your server cannot communicate with the Magic server. Normally this is a network communication error.
note

See Error Handling for more examples.

#Returns

  • A MagicResponse: The data field contains all of the user meta information.
    • issuer (str): The user's Decentralized ID
    • public_address (str): The authenticated user's public address (a.k.a.: public key). Currently, this value is associated with the Ethereum blockchain.
    • email (str): The user's email address
    • phone_number (str): The user's phone number
    • oauth_provider (str): OAuth provider, if any
    • wallets (arr): Array of user's wallet addresses

#get_metadata_by_public_address

Retrieves information about the user by the supplied public_address. This method is useful if you store the public_address with your user data.

Ruby
01user.get_metadata_by_public_address(public_address)

#Arguments

#Raises

  • RateLimitingError: If you have sent too many requests within a given period of time
  • BadRequestError: If the supplied parameters are invalid
  • AuthenticationError: If your API secret key cannot be authenticated with Magic API server
  • ForbiddenError: If your API secret key is not authorized to access the resources
  • APIError: For any other API error
  • APIConnectionError: If your server cannot communicate with the Magic server. Normally this is a network communication error.
note

See Error Handling for more examples.

#Returns

  • A MagicResponse: The data field contains all of the user meta information.
    • issuer (str): The user's Decentralized ID
    • public_address (str): The authenticated user's public address (a.k.a.: public key). Currently, this value is associated with the Ethereum blockchain.
    • email (str): The user's email address
    • phone_number (str): The user's phone number
    • oauth_provider (str): OAuth provider, if any
    • wallets (arr): Array of user's wallet addresses

#get_metadata_by_token

Retrieves information about the user by the supplied DID Token.

Ruby
01user.get_metadata_by_token(did_token)

#Arguments

  • did_token (str): A DID Token generated by a Magic User on the client-side.

#Raises

  • RateLimitingError: If you have sent too many requests within a given period of time
  • BadRequestError: If the supplied parameters are invalid
  • AuthenticationError: If your API secret key cannot be authenticated with Magic API server
  • ForbiddenError: If your API secret key is not authorized to access the resources
  • APIError: For any other API error
  • APIConnectionError: If your server cannot communicate with the Magic server. Normally this is a network communication error.
note

See Error Handling for more examples.

#Returns

  • A MagicResponse: The data field contains all of the user meta information.
    • issuer (str): The user's Decentralized ID
    • public_address (str): The authenticated user's public address (a.k.a.: public key). Currently, this value is associated with the Ethereum blockchain.
    • email (str): The user's email address
    • phone_number (str): The user's phone number
    • oauth_provider (str): OAuth provider, if any
    • wallets (arr): Array of user's wallet addresses

#logout_by_issuer

Logs a user out of all Magic SDK sessions given the user's Decentralized ID (iss). This method is useful if you store the iss with your user data, which is recommended.

Ruby
01user.logout_by_issuer(issuer)

#Arguments

  • issuer (str): The user's Decentralized ID, which can be parsed using token.get_issuer

#Raises

  • RateLimitingError: If you have sent too many requests within a given period of time
  • BadRequestError: If the supplied parameters are invalid
  • AuthenticationError: If your API secret key cannot be authenticated with Magic API server
  • ForbiddenError: If your API secret key is not authorized to access the resources
  • APIError: For any other API error
  • APIConnectionError: If your server cannot communicate with the Magic server. Normally this is a network communication error.
note

See Error Handling for more examples.

#Returns

#logout_by_public_address

Logs a user out of all Magic SDK sessions given the user's public address. This method is useful if you store the public_address .

Ruby
01user.logout_by_public_address(public_address)

#Arguments

  • public_address (str): The user's Ethereum public address

#Raises

  • RateLimitingError: If you have sent too many requests within a given period of time
  • BadRequestError: If the supplied parameters are invalid
  • AuthenticationError: If your API secret key cannot be authenticated with Magic API server
  • ForbiddenError: If your API secret key is not authorized to access the resources
  • APIError: For any other API error
  • APIConnectionError: If your server cannot communicate with the Magic server. Normally this is a network communication error.
note

See Error Handling for more examples.

#Returns

#logout_by_token

Logs a user out of all Magic SDK sessions given the DID Token.

Ruby
01user.logout_by_token(did_token)

#Arguments

  • did_token (str): A DID Token generated by a Magic user on the client-side

#Raises

  • RateLimitingError: If you have sent too many requests within a given period of time
  • BadRequestError: If the supplied parameters are invalid
  • AuthenticationError: If your API secret key cannot be authenticated with Magic API server
  • ForbiddenError: If your API secret key is not authorized to access the resources
  • APIError: For any other API error
  • APIConnectionError: If your server cannot communicate with the Magic server. Normally this is a network communication error.
note

See Error Handling for more examples.

#Returns

#Response and Error Handling

#Response

There is only one response object that will be returned from a successful API call.

#MagicResponse

This is the interface to interact Magic API responses. It will only be returned if the API request status code is between 200 (inclusive) and 300 (exclusive).

You will have access to the following attributes:

  • content (string): Raw content returned by the API response
  • data (hash): Parsed content
  • status_code (num): HTTP status code for the given request
Ruby
01require 'magic-admin'
02
03response = MagicAdmin::Http::Response.new(http_resp)
04response.content
05response.data
06response.status_code

#Errors

The conventional HTTP response is adopted by the SDK. For the status code in:

  • 2XX - Indicates success
  • 4XX - Indicates client errors. Information provided to the SDK is invalid.
  • 5XX - Indicates server errors

Below is the error class inheritance which can help developers to programmatically handle the error cases.

01MagicError
02    |
03    |------- DIDTokenError
04    |
05    |------- RequestError
06                  |
07                  |------- RateLimitingError
08                  |------- BadRequestError
09                  |------- AuthenticationError
10                  |------- ForbiddenError
11                  |------- APIError
12                  |------- APIConnectionError

#MagicError

This is the base class of all the Magic SDK errors.

Ruby
01MagicError.new('<message>')

#DIDTokenError

Any DID Token related error. This can mean the given token is malformed or invalid.

#RequestError

This is the base class of all the Magic API request errors. This error class will provide details of unsuccessful API requests.

Ruby
01http_detail = {
02   http_status: '<http_status>',
03   http_code: '<http_code>',
04   http_response: '<http_response>',
05   http_message: '<http_message>',
06   http_error_code: '<http_error_code>',
07   http_request_params: '<http_request_params>',
08   http_request_data: '<http_request_data>',
09   http_method: '<http_method>'
10}
11MagicAdmin::RequestError.new('<message>', http_detail)
CodeErrorDescription
429RateLimitingErrorToo many requests are submitted for a given period of time.
400BadRequestErrorThe API requests might have missing required fields or bad inputs.
401AuthenticationErrorThis means your API secret key is invalid.
403ForbiddenErrorThis normally means the given API secret key doesn't have permission to perform the action on the given resources.
APIErrorThis is a generic API error that handlers other status codes that are not explicitly handled. Ex: 500 , 404 , etc.
APIConnectionErrorNetwork connection error. This normally means the connection between your application and Magic API server cannot be established.

#Error Handling

It is recommended to implement error handling for API responses.

Ruby
01begin
02   # Make requests to Magic server.
03rescue MagicAdmin::DIDTokenError => e
04   puts e.message
05rescue MagicAdmin::RateLimitingError => e
06   puts e.message
07rescue MagicAdmin::BadRequestError => e
08   puts e.message
09rescue MagicAdmin::AuthenticationError => e
10   puts e.message
11rescue MagicAdmin::ForbiddenError => e
12   puts e.message
13rescue MagicAdmin::APIError => e
14   puts e.message
15rescue MagicAdmin::APIConnectionError => e
16   puts e.message
17end

#Resources