Skip to content

Latest commit

 

History

History

api-client

@roll-network/api-client

The @roll-network/api-client is a JavaScript package that offers an easy and efficient way to interact with the Roll Network's API services. It provides a convenient and maintainable method to make HTTP requests and manage API tokens.

The package primarily exports two classes: Client and ClientPool.

Prerequisites

The library uses better-queue, a browser-compatible Node package. When used in a browser environment, it requires the util package to be installed.

You can install these packages using npm:

Using npm:

npm install util

Using yarn:

yarn add util

Installation

Use the package manager npm to install @roll-network/api-client.

Using npm:

npm install @roll-network/api-client

Using yarn:

yarn add @roll-network/api-client

Importing

You can import the package in your project using:

import Client, { ClientPool } from '@roll-network/api-client'

Usage

Client

The Client class is designed to interact with the Roll Network's API services using a given configuration and SDK.

import SDK from '@roll-network/auth-sdk'
import Client from '@roll-network/api-client'
import { user as userAPI } from '@roll-network/api'

const authSdk = new SDK(
  {
    clientId: config.clientID,
    issuerUrl: config.issuerURL,
    redirectUrl: config.redirectURL,
    logoutRedirectUrl: config.redirectURL,
    scopes: config.scopes,
  },
  window.localStorage,
)

const apiClient = new Client({ baseUrl: config.apiURL }, authSdk)
const user = await userAPI.getMe(apiClient.call)

Multiple users

The Client's call method is able to make requests for a specific user (from authSdk).

import SDK from '@roll-network/auth-sdk'
import Client from '@roll-network/api-client'
import { user as userAPI } from '@roll-network/api'

const authSdk = new SDK(
  {
    clientId: config.clientID,
    issuerUrl: config.issuerURL,
    redirectUrl: config.redirectURL,
    logoutRedirectUrl: config.redirectURL,
    scopes: config.scopes,
  },
  window.localStorage,
)

// When you get oauth code & state from authorization server, you'll have to generate a token
// After the generation, the SDK will automatically fetch the user & save him under his ID
const credentials = await authSdk.generateToken({
  code,
  state,
})

const apiClient = new Client({ baseUrl: config.apiURL }, authSdk)
const user = await userAPI.getMe(apiClient.getCall(credentials.user.userID))

ClientPool

The ClientPool class creates a set of clients with different SDKs injected. This allows you to switch between different interaction types depending on your requirements.

import { SDKPool, InteractionType } from '@roll-network/auth-sdk'
import { ClientPool } from '@roll-network/api-client'

const sdkPool = new SDKPool(config)

await sdkPool.getSDK(InteractionType.ClientCredentials).generateToken()
const clientPool = new ClientPool({ baseUrl: process.env.API_URL }, sdkPool)
const response = await token.getTokens(
  clientPool.getClient(InteractionType.ClientCredentials).call,
  answers,
)

const oauthCode = 'foo' // Use a real oauth code here
await sdkPool.getSDK(InteractionType.Code).generateToken(oauthCode)
const response = await token.getTokens(
  clientPool.getClient(InteractionType.Code).call,
  answers,
)

Errors

The library has custom errors which can be used for precise error handling:

  • CouldntRefreshTokensError: Thrown when the client fails to refresh the tokens.