@zenginehq-client
A library working with the NextZen Authorization and GraphQL API. It provides URL and URN helpers, an OAuth client credentials flow based token exchange, a light weight GraphQL client, and a GraphQL file upload client.
URL helpers can build URLs for interacting with NextZen Authorization, GraphQL API. These helpers take your base portal URL in the form:
https://your-subdomain.portals.wizehive.app
And return URL to use in client calls:
Function | Purpose |
---|
authURL | Build URL for fetching token set |
apiURL | Build URL for executing GraphQL queries |
uploadURL | Build URL for uploading file |
Resource helpers can build URNs for requesting additional permissions for GraphQL API calls. These helpers take either your organization slug or a specific program slug. Your organization slug is the same as your subdomain in your portal URL:
Function | Purpose |
---|
organizationResource | Build URN for requesting organization permissions |
programResource | Build URN for requestingprogram permissions |
OAuth client credentials flow based token exchange
To exchange your OAuth2 client credentials for a short lived access token:
import { authURL, fetchTokenSet } from '@zenginehq/client'
const clientId = process.env.CLIENT_ID
const clientSecret = process.env.CLIENT_SECRET
const accessToken = await fetchTokenSet('https://your-subdomain.portals.wizehive.app', clientId, clientSecret)
.then((tokenSet) => {
const { accessToken } = tokenSet
if (!accessToken) {
throw new Error('Not Authorized')
}
return accessToken
})
.catch((error) => {
throw new Error('Not Authorized')
})
GraphQL query
To perform a GraphQL query:
import { apiURL, graphQLFetch,organizationResource, GraphQlErrors, GraphQlResponse, assetrNoErrors } from '@zenginehq/client'
const organization = await graphQLFetch({
url: apiURL('https://your-subdomain.portals.wizehive.app'),
headers: {
Authorization: `Bearer ${accessToken}`,
Resource: organizationResource('your-subdomain')
},
query: `
query Organization($slug: String!) {
organization(slug: $slug) {
id
name
slug
createdAt
updatedAt
}
}
`,
variables: {
slug: 'your-subdomain'
}
}).then(({ data, errors }: GraphQlResponse) => {
assetrNoErrors(errors as GraphQlErrors, 'query organization')
return data?.organization
})
Upload file
To perform a file upload:
import { apiURL, graphQLFetch,organizationResource, GraphQlErrors, GraphQlResponse, assetrNoErrors } from '@zenginehq/client'
const fileId = await uploadFile({
url: uploadURL('https://your-subdomain.portals.wizehive.app'),
headers: {
Authorization: `Bearer ${accessToken}`,
Resource: organizationResource('your-subdomain')
},
organizationId,
file: createReadStream(filepath),
filename: 'file.txt',
mimetype: 'text/plain'
}).then(({ data, errors }: GraphQlResponse) => {
assetrNoErrors(errors as GraphQlErrors, 'upload file')
return data?.uploadFile?.file?.id
})