@unloc/integrator-client-library
v1.0.24
Published
This is a client library for the [Unloc Integrator API](https://developer.unloc.app/docs/how-to-use-the-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
Downloads
6
Keywords
Readme
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()