@unloc/integrator-client-library
TypeScript icon, indicating that this package has built-in type declarations

1.0.24 • Public • Published

Integrator wrapper

This is a client library for the Unloc Integrator API. It contains functions that wrap the api endpoints and can be used both in the browser and in a node environment. This library does not help you with authentication, which is handled by the Auth API The Unloc API does not currently support front-end authentication, but an example backend can be found here

Init

To initialize the package use the init function

// If using typescript import * as unloc from '../integrator-client-library'
const unloc = require('@unloc/integrator-client-library')
unloc.init("https://api-sandbox.unloc.app")

https://api-sandbox.unloc.app for the sandbox environment
https://api.unloc.app for the production environment

Access tokens

For security reasons you should never include your client id or secret in client code. Tokens can be scoped or unscoped. First we need to get an unscoped token for getting lockholders. Then we can get a scoped token for a lockholder and then we can get data for that lockholder.

In this example I assume there is a function getToken which handles getting a token from the auth backend. If it is called with no arguments it returns an unscoped token, if it is called with a scope it gives a scoped token. There is a helper function called lockHolderScope which takes a lockholder and gives you the correct scope string to send to the auth api. The getToken function could be implemented like this

const getToken = async (scope) => {
  let body = {
    grant_type: "client_credentials",
    client_id: "YOUR_CLIENT_ID",
    client_secret: "YOUR_CLIENT_SECRET",
  };
  if (scope) {
    body["scope"] = scope;
  }
  const response = await fetch(`https://api-sandbox.unloc.app/auth/v1/token`, {
    method: "post",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(body),
  });
  const json = await response.json();
  return json
}

Example

This example gets all data from a lockholder

// In a node environment import it like this
const unloc = require('@unloc/integrator-client-library')

unloc.init("https://api-sandbox.unloc.app")

const main = async () => {
  const token = await getToken()

  let lockHolderResponse = await unloc.getLockHolders(token.access_token)

  const lockHolders = lockHolderResponse.data

  const scopedToken = await getToken(unloc.lockHolderScope(lockHolders[0]))
  const scopedAccessToken = scopedToken.access_token
  const lockHolderId = scopedToken.lock_holder_id

  const getAllData = async (lockHolder) => {
      const [keysResponse, locksResponse, rolesResponse] = await Promise.all([
          await unloc.getKeys(scopedAccessToken, {lockHolderId}),
          await unloc.getLocks(scopedAccessToken, {lockHolderId}),
          await unloc.getRoles(scopedAccessToken, {lockHolderId})
      ])
      return { keys: keysResponse.data, locks: locksResponse.data, roles: rolesResponse.data }
  }

  const { keys, locks, roles } = await getAllData(lockHolders[0])
  console.log("Keys: ", keys, "Locks ", locks, "Roles ", roles)
}

main()

Readme

Keywords

none

Package Sidebar

Install

npm i @unloc/integrator-client-library

Weekly Downloads

19

Version

1.0.24

License

ISC

Unpacked Size

1.41 MB

Total Files

285

Last publish

Collaborators

  • quistnor
  • frikkunloc
  • august_unloc
  • andreas_normann