2.1.0 • Published 1 year ago

aruba-clearpass-api v2.1.0

Weekly downloads
40
License
-
Repository
github
Last release
1 year ago

aruba-clearpass-api

NPM

This library is a simple "helper" library for interfacing with the Aruba ClearPass API. It is still very much in development, but updates will come as requested or needed.

In v2 we have replaced request with axios and implemented async/await promise based functionality to all processes (all methods have a primary "Async" (for example getDeviceAsync) version of the function). The old functionality remains the same, but is now based on axios requests and a little cleaner, we think.

NOTE: Error objects are now often times an axios error and will contain a lot of error details. You may need to update your error logging code accordingly.

Example

const CppmApi = require('aruba-clearpass-api');

var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false
});

// Get a list of devices from CPPM.
var o = {
    filter: {},
    sort: '-id',
    offset: 0,
    limit: 1
};

client.getDevicesAsync(o)
    .then((resp) => {
        console.log(resp.data);
    })
    .catch((e) => {
        console.log(e.message);
    });
});

Or

const CppmApi = require('aruba-clearpass-api');

var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false
});

// Get a list of devices from CPPM.
var o = {
    filter: {},
    sort: '-id',
    offset: 0,
    limit: 1
};

client.getDevices(o, function (error, data, statusCode) {
    if (error) {
        console.log(error.message);
    }
    else {
        if (statusCode == 200) {
            console.log(JSON.stringify(data, null, 2));
        }
    }
});

Installation

With npm do:

npm install -g aruba-clearpass-api

Supported Methods

OAuth Methods

ClearPassApi.getToken

Gets the authentication token for the API. If options.token is provided, then that token is returned. If a Client ID and Client Secret are provided a token is generated useing the OAuth clientcredentials grant type.

ClearPassApi.getToken(callback(error, token))

ClearPassApi.getMyInfo

Gets information about the user the current token is for.

ClearPassApi.getMyInfo(callback(error, json, statusCode))

ClearPassApi.getMyPrivileges

Gets the privileges for the user the current token is for.

ClearPassApi.getMyPrivileges(callback(error, json, statusCode))

Platform: System Information

ClearPassApi.getServerVersion

Gets the server version information.

ClearPassApi.getServerVersion(callback(error, json, statusCode))

ClearPassApi.getFipsStatus

Gets the current FIPS status of the server.

ClearPassApi.getFipsStatus(callback(error, json, statusCode))

ClearPassApi.getServerConfiguration

Gets the servers basic configuration information.

ClearPassApi.getServerConfiguration(callback(error, json, statusCode))


API Framework: Clients

ClearPassApi.getApiClients

Search for API Clients.

ClearPassApi.getApiClients(options, callback(error, json, statusCode))

ClearPassApi.createApiClient

Create a new API Client.

ClearPassApi.createApiClient(apiClient, callback(error, json, statusCode))

ClearPassApi.getApiClient

Get the details of an API Client.

ClearPassApi.getApiClient(clientId, callback(error, json, statusCode))

ClearPassApi.updateApiClient

Update an API Client.

ClearPassApi.updateApiClient(clientId, clientOptions, callback(error, json, statusCode))

ClearPassApi.replaceApiClient

Replace an API Client.

ClearPassApi.replaceApiClient(clientId, clientOptions, callback(error, json, statusCode))

ClearPassApi.deleteApiClient

Delete an API Client.

ClearPassApi.deleteApiClient(clientId, callback(error, json, statusCode))


Guest Manager: Configuration

ClearPassApi.getGuestManagerConfiguration

Get the current Guest Manager configuration.

ClearPassApi.getGuestManagerConfiguration(callback(error, json, statusCode))

ClearPassApi.updateGuestManagerConfiguration

Update the Guest Manager configuration.

ClearPassApi.updateGuestManagerConfiguration(options, callback(error, json, statusCode))


Guest Manager: Sessions

ClearPassApi.getGuestSessions

Search for guest sessions.

ClearPassApi.getGuestSessions(options, callback(error, json, statusCode))

ClearPassApi.disconnectSession

Disconnect an active session.

ClearPassApi.disconnectSession(sessionId, callback(error, json, statusCode))

ClearPassApi.getSessionReauthorizationProfiles

Get reauthorization profiles for an active session.

ClearPassApi.getSessionReauthorizationProfiles(sessionId, callback(error, json, statusCode))

ClearPassApi.reauthorizeSession

Force an active session to reauthorize. Optionally specify a reauthorization profile.

ClearPassApi.reauthorizeSession(sessionId, reauthProfile, callback(error, json, statusCode))


Guest Manager: Devices

ClearPassApi.getDevices

Search for device accounts.

ClearPassApi.getDevices(options, callback(error, json, statusCode))

ClearPassApi.createDevice

Create a device account.

ClearPassApi.createDevice(deviceAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.getDevice

Get a device account by device id.

ClearPassApi.getDevice(deviceId, next)

ClearPassApi.updateDevice

Update or add device account attributes using the device id.

ClearPassApi.updateDevice(deviceId, deviceAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.replaceDevice

Replace the attributes of a device account using the device id.

ClearPassApi.replaceDevice(deviceId, deviceAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.deleteDevice

Delete a device account using the device id.

ClearPassApi.deleteDevice(deviceId, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.getDeviceByMac

Get a device account by MAC Address.

ClearPassApi.getDeviceByMac(macAddress, callback(error, json, statusCode))

ClearPassApi.updateDeviceByMac

Update or add device account attributes using the MAC Address.

ClearPassApi.updateDeviceByMac(macAddress, deviceAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.replaceDeviceByMac

Replace the attributes of a device account using the MAC Address.

ClearPassApi.replaceDeviceByMac(macAddress, deviceAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.deleteDeviceByMac

Delete a device account using the MAC Address.

ClearPassApi.deleteDeviceByMac(macAddress, doChangeOfAuth, callback(error, json, statusCode))


Guest Manager: Guests

ClearPassApi.getGuests

Search for guest accounts.

ClearPassApi.getGuests(options, callback(error, json, statusCode))

ClearPassApi.createGuest

Create a new guest account.

ClearPassApi.createGuest(guestAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.getGuest

Get a guest account by guest id.

ClearPassApi.getGuest(guestId, callback(error, json, statusCode))

ClearPassApi.updateGuest

Update a guest account using the guest id.

ClearPassApi.updateGuest(guestId, guestAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.replaceGuest

Replace the attributes of a guest account using the guest id.

ClearPassApi.replaceGuest(guestId, guestAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.deleteGuest

Delete a guest account using the guest id.

ClearPassApi.deleteGuest(guestId, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.getGuestByUserName

Get a guest account by user name.

ClearPassApi.getGuestByUserName(userName, callback(error, json, statusCode))

ClearPassApi.updateGuestByUserName

Update a guest account using the user name.

ClearPassApi.updateGuestByUserName(userName, guestAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.replaceGuestByUserName

Replace the attributes of a guest account using the user name.

ClearPassApi.replaceGuestByUserName(userName, guestAttributes, doChangeOfAuth, callback(error, json, statusCode))

ClearPassApi.deleteGuestByUserName

Delete a guest account using the user name.

ClearPassApi.deleteGuestByUserName(userName, doChangeOfAuth, callback(error, json, statusCode))


Guest Manager: Random Password

ClearPassApi.getRandomPassword

Generate a random password.

ClearPassApi.getRandomPassword(options, callback(error, json, statusCode))


Guest Manager: Guest Sponsor

ClearPassApi.confirmGuestSponsor

Accept or Reject a guest account that is waiting for sponsor approval.

ClearPassApi.confirmGuestSponsor(guestId, options, callback(error, json, statusCode))

Requires a guest self-registration page that has been configured for sponsor confirmation.


Identity: Endpoints

ClearPassApi.getEndpoints

Search for endpoints.

ClearPassApi.getEndpoints(options, callback(error, json, statusCode))

ClearPassApi.createEndpoint

Create a new endpoint.

ClearPassApi.createEndpoint(endpointAttributes, callback(error, json, statusCode))

ClearPassApi.getEndpoint

Get an endpoint by id.

ClearPassApi.getEndpoint(endpointId, callback(error, json, statusCode))

ClearPassApi.updateEndpoint

Update an endpoints attributes by id.

ClearPassApi.updateEndpoint(endpointId, endpointAttributes, callback(error, json, statusCode))

ClearPassApi.replaceEndpoint

Replace an endpoint by id.

ClearPassApi.replaceEndpoint(endpointId, endpointAttributes, callback(error, json, statusCode))

ClearPassApi.deleteEndpoint

Delete an endpoint by id.

ClearPassApi.deleteEndpoint(endpointId, callback(error, json, statusCode))

ClearPassApi.getEndpointByMac

Get an endpoint by MAC Address.

ClearPassApi.getEndpointByMac(macAddress, callback(error, json, statusCode))

ClearPassApi.updateEndpointByMac

Update an endpoints attributes by MAC Address.

ClearPassApi.updateEndpointByMac(macAddress, endpointAttributes, callback(error, json, statusCode))

ClearPassApi.replaceEndpointByMac

Replace an endpoint by MAC Address.

ClearPassApi.replaceEndpointByMac(macAddress, endpointAttributes, callback(error, json, statusCode))

ClearPassApi.deleteEndpointByMac

Delete an endpoint by MAC Address.

ClearPassApi.deleteEndpointByMac(macAddress, callback(error, json, statusCode))


Identity: Local Users

ClearPassApi.getLocalUsers

Search for Local Users.

ClearPassApi.getLocalUsers(options, callback(error, json, statusCode))

ClearPassApi.createLocalUser

Create a new Local User.

ClearPassApi.createLocalUser(options, callback(error, json, statusCode))

ClearPassApi.getLocalUser

Get a local user by local user id.

ClearPassApi.getLocalUser(userId, callback(error, json, statusCode))

ClearPassApi.updateLocalUser

Update a local user by local user id.

ClearPassApi.updateLocalUser(userId, options, callback(error, json, statusCode))

ClearPassApi.replaceLocalUser

Replace a local user by local user id.

ClearPassApi.replaceLocalUser(userId, options, callback(error, json, statusCode))

ClearPassApi.deleteLocalUser

Delete a local user by local user id.

ClearPassApi.deleteLocalUser(userId, callback(error, json, statusCode))

ClearPassApi.getLocalUserById

Get a local user by user id.

ClearPassApi.getLocalUserById(userId, callback(error, json, statusCode))

ClearPassApi.updateLocalUserById

Update a local user by user id.

ClearPassApi.updateLocalUserById(userId, options, callback(error, json, statusCode))

ClearPassApi.replaceLocalUserById

Replace a local user by user id.

ClearPassApi.replaceLocalUserById(userId, options, callback(error, json, statusCode))

ClearPassApi.deleteLocalUserById

Delete a local user by user id.

ClearPassApi.deleteLocalUserById(userId, callback(error, json, statusCode))


Extensions

ClearPassApi.getExtensions

Get a list of installed extensions.

ClearPassApi.getExtensions(options, callback(error, json, statusCode))

ClearPassApi.installExtension

Install a new extension from the extension store.

ClearPassApi.installExtension(createOptions, callback(error, json, statusCode))

ClearPassApi.getExtension

Get information about an installed extension.

ClearPassApi.getExtension(extensionId, callback(error, json, statusCode))

ClearPassApi.updateExtensionState

Update the running state of an extension.

ClearPassApi.updateExtensionState(extensionId, extensionState, callback(error, json, statusCode))

ClearPassApi.deleteExtension

Delete an installed extension.

ClearPassApi.deleteExtension(extensionId, force, callback(error, json, statusCode))

ClearPassApi.getExtensionConfig

Get the configuration of an installed extension.

ClearPassApi.getExtensionConfig(extensionId, next)

ClearPassApi.updateExtensionConfig

Update the configuration of an installed extension.

ClearPassApi.updateExtensionConfig(extensionId, config, callback(error, json, statusCode))

ClearPassApi.restartExtension

Restart an installed extension.

ClearPassApi.restartExtension(extensionId, callback(error, json, statusCode))

ClearPassApi.startExtension

Start an installed extension.

ClearPassApi.startExtension(extensionId, callback(error, json, statusCode))

ClearPassApi.stopExtension

Stop an installed extension.

ClearPassApi.stopExtension(extensionId, callback(error, json, statusCode))

ClearPassApi.getExtensionLogs

Get the logs for an installed extension.

ClearPassApi.getExtensionLogs(extensionId, logOptions, callback(error, json, statusCode))


Dictionaries: Attributes

ClearPassApi.getAttributes

Search for attributes.

ClearPassApi.getAttributes(options, callback(error, json, statusCode))

ClearPassApi.createAttribute

Create a new attribute.

ClearPassApi.createAttribute(attribute, callback(error, json, statusCode))

ClearPassApi.getAttribute

Get an attribute by id.

ClearPassApi.getAttribute(attributeId, callback(error, json, statusCode))

ClearPassApi.updateAttribute

Update an attributes information.

ClearPassApi.updateAttribute(attributeId, attribute, callback(error, json, statusCode))

ClearPassApi.replaceAttribute

Replace an attribute.

ClearPassApi.replaceAttribute(attributeId, attribute, callback(error, json, statusCode))

ClearPassApi.deleteAttribute

Delete an attribute.

ClearPassApi.deleteAttribute(attributeId, callback(error, json, statusCode))

ClearPassApi.getAttributeByName

Get an attribute by name.

ClearPassApi.getAttributeByName(entityName, attributeName, callback(error, json, statusCode))

ClearPassApi.updateAttributeByName

Update an attribute.

ClearPassApi.updateAttributeByName(entityName, attributeName, attribute, callback(error, json, statusCode))

ClearPassApi.replaceAttributeByName

Replace an attribute.

ClearPassApi.replaceAttributeByName(entityName, attributeName, attribute, callback(error, json, statusCode))

ClearPassApi.deleteAttributeByName

Delete an attribute.

ClearPassApi.deleteAttributeByName(entityName, attributeName, callback(error, json, statusCode))


Dictionaries: Context Server Actions

ClearPassApi.getContextServerActions

Search for context server actions.

ClearPassApi.getContextServerActions(options, callback(error, json, statusCode))

ClearPassApi.createContextServerAction

Create a new context server action.

ClearPassApi.createContextServerAction(action, callback(error, json, statusCode))

ClearPassApi.getContextServerAction

Get a context server action by id.

ClearPassApi.getContextServerAction(csaId, callback(error, json, statusCode))

ClearPassApi.updateContextServerAction

Update a context server action.

ClearPassApi.updateContextServerAction(csaId, action, callback(error, json, statusCode))

ClearPassApi.replaceContextServerAction

Replace a context server action.

ClearPassApi.replaceContextServerAction(csaId, action, callback(error, json, statusCode))

ClearPassApi.deleteContextServerAction

Delete a context server action.

ClearPassApi.deleteContextServerAction(csaId, callback(error, json, statusCode))

ClearPassApi.getContextServerActionByName

Get a context server action by name.

ClearPassApi.getContextServerActionByName(serverType, actionName, callback(error, json, statusCode))

ClearPassApi.updateContextServerActionByName

Update a context server action.

ClearPassApi.updateContextServerActionByName(serverType, actionName, action, callback(error, json, statusCode))

ClearPassApi.replaceContextServerActionByName

Replace a context server action.

ClearPassApi.replaceContextServerActionByName(serverType, actionName, action, callback(error, json, statusCode))

ClearPassApi.deleteContextServerActionByName

Delete a context server action.

ClearPassApi.deleteContextServerActionByName(serverType, actionName, callback(error, json, statusCode))


Dictionaries: Fingerprint

ClearPassApi.getFingerprints

Search for fingerprints.

ClearPassApi.getFingerprints(options, callback(error, json, statusCode))

ClearPassApi.createFingerprint

Create a new fingerprint.

ClearPassApi.createFingerprint(fingerprint, callback(error, json, statusCode))

ClearPassApi.getFingerprint

Get a fingerprint by id.

ClearPassApi.getFingerprint(fId, callback(error, json, statusCode))

ClearPassApi.updateFingerprint

Update a fingerprint.

ClearPassApi.updateFingerprint(fId, fingerprint, callback(error, json, statusCode))

ClearPassApi.replaceFingerprint

Replace a fingerprint.

ClearPassApi.replaceFingerprint(fId, fingerprint, callback(error, json, statusCode))

ClearPassApi.deleteFingerprint

Delete a fingerprint.

ClearPassApi.deleteFingerprint(fId, callback(error, json, statusCode))

ClearPassApi.getFingerprintByName

Get a fingerprint by name.

ClearPassApi.getFingerprintByName(category, family, name, callback(error, json, statusCode))

ClearPassApi.updateFingerprintByName

Update a fingerprint.

ClearPassApi.updateFingerprintByName(category, family, name, fingerprint, callback(error, json, statusCode))

ClearPassApi.replaceFingerprintByName

Replace a fingerprint.

ClearPassApi.replaceFingerprintByName(category, family, name, fingerprint, callback(error, json, statusCode))

ClearPassApi.deleteFingerprintByName

Delete a fingerprint.

ClearPassApi.deleteFingerprintByName(category, family, name, callback(error, json, statusCode))


Insights: Endpoint

ClearPassApi.getInsightsByMac

Get insights for a specific MAC Address.

ClearPassApi.getInsightsByMac(macAddress, callback(error, json, statusCode))

ClearPassApi.getInsightsByIp

Get insights for a specific IP Address.

ClearPassApi.getInsightsByIp(ipAddr, callback(error, json, statusCode))

ClearPassApi.getInsightsByIpRange

Get insights by IP Address range. e.g. '192.168.1.1-254', '10.1.1.100-200'

ClearPassApi.getInsightsByIpRange(ipAddrRange, callback(error, json, statusCode))

ClearPassApi.getInsightsByTimeRange

Get insights for a specific time range. Start Time and End Time can be either UNIX timestamp or a javascript Date.

ClearPassApi.getInsightsByTimeRange(startTime, endTime, callback(error, json, statusCode))

var startTime = new Date();
startTime.setMonth(startTime.getMonth() - 1);
var endTime = new Date();

console.log('Start Time: ' + startTime.toString());
console.log('End Time: ' + endTime.toString());
client.getInsightsByTimeRange(startTime, endTime, function (error, data) {
    if (error) {
        console.log(error);
    }
    else {
        console.log(JSON.stringify(data, null, 2));
    }
});

ClearPassApi.dateToUnixTimestamp

Convert a date to a UNIX timestamp.

ClearPassApi.dateToUnixTimestamp(date)


Network: Network Device

ClearPassApi.getNetworkDevices

Search for a network device.

ClearPassApi.getNetworkDevices(options, callback(error, json, statusCode))

ClearPassApi.createNetworkDevice

Create a new network device.

ClearPassApi.createNetworkDevice(device, callback(error, json, statusCode))

ClearPassApi.getNetworkDevice

Get a network device.

ClearPassApi.getNetworkDevice(deviceId, callback(error, json, statusCode))

ClearPassApi.updateNetworkDevice

Update a network device.

ClearPassApi.updateNetworkDevice(deviceId, device, callback(error, json, statusCode))

ClearPassApi.replaceNetworkDevice

Replace a network device.

ClearPassApi.replaceNetworkDevice(deviceId, device, callback(error, json, statusCode))

ClearPassApi.deleteNetworkDevice

Delete a network device.

ClearPassApi.deleteNetworkDevice(deviceId, callback(error, json, statusCode))

ClearPassApi.getNetworkDeviceByName

Get a network device.

ClearPassApi.getNetworkDeviceByName(deviceName, callback(error, json, statusCode))

ClearPassApi.updateNetworkDeviceByName

Update a network device.

ClearPassApi.updateNetworkDeviceByName(deviceName, device, callback(error, json, statusCode))

ClearPassApi.replaceNetworkDeviceByName

Replace a network device.

ClearPassApi.replaceNetworkDeviceByName(deviceName, device, callback(error, json, statusCode))

ClearPassApi.deleteNetworkDeviceByName

Delete a network device.

ClearPassApi.deleteNetworkDeviceByName(deviceName, callback(error, json, statusCode))


Onboard: Certificates

ClearPassApi.getCertificates

Search for installed certificates.

ClearPassApi.getCertificates(options, callback(error, json, statusCode))

ClearPassApi.getCertificate

Get a certificate.

ClearPassApi.getCertificate(certId, callback(error, json, statusCode))

ClearPassApi.deleteCertificate

Delete a certificate.

ClearPassApi.deleteCertificate(certId, callback(error, json, statusCode))

ClearPassApi.getCertificateTrustChain

Get a certificate and its trust chain.

ClearPassApi.getCertificateTrustChain(certId, callback(error, json, statusCode))


Onboard: Devices

ClearPassApi.getOnboardDevices

Search for onboarded devices.

ClearPassApi.getOnboardDevices(options, callback(error, json, statusCode))

ClearPassApi.getOnboardDevice

Get an onboarded device.

ClearPassApi.getOnboardDevice(deviceId, callback(error, json, statusCode))

ClearPassApi.updateOnboardDevice

Update an onboarded device.

ClearPassApi.updateOnboardDevice(deviceId, options, callback(error, json, statusCode))

ClearPassApi.deleteOnboardDevice

Delete an onboarded device.

ClearPassApi.deleteOnboardDevice(deviceId, callback(error, json, statusCode))


Onboard: Users

ClearPassApi.getOnboardUsers

Search for onboarded users.

ClearPassApi.getOnboardUsers(options, callback(error, json, statusCode))

ClearPassApi.getOnboardUser

Get an onboarded user.

ClearPassApi.getOnboardUser(userId, callback(error, json, statusCode))

ClearPassApi.updateOnboardUser

Update an onboarded user.

ClearPassApi.updateOnboardUser(userId, options, callback(error, json, statusCode))

ClearPassApi.deleteOnboardUser

Delete an onboarded user.

ClearPassApi.deleteOnboardUser(userId, callback(error, json, statusCode))


Legacy API: Profile Endpoint

ClearPassApi.profileEndpoint

Submit a device to the profiler. This does not return profile information, it submits the information to the profiler system.

Information can be viewed after processing in ClearPass Policy Manager > Configuration > Identity > Endpoints (Profiled: YES should be set on the endpoint if it was processed).

ClearPassApi.profileEndpoint(endpointInfo, callback(error, json, statusCode))


Authentication

This system supports OAuth2 authentication, or the supplying of a valid token.

To use standard OAuth2, you must supply a Client Id and Client Secret, if you are just planning to supply a token, all you need to do is pass it in.

// OAuth2
var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false
});

// Token Only
var client = new CppmApi({
    host: '127.0.0.1',
    token: '4c85...0fd8',
    sslValidation: false
});

Filters

Filters are used in various API calls to limit data, here are the basic information for what is supported.

A filter is specified as a JSON object, where the properties of the object specify the type of query to be performed.

DescriptionJSON Filter Syntax
No filter, matches everything{}
Field is equal to "value"{"fieldName":"value"} or {"fieldName":{"$eq":"value"}}
Field is one of a list of values{"fieldName":"value1", "value2"} or {"fieldName":{"$in":"value1", "value2"}}
Field is not one of a list of values{"fieldName":{"$nin":"value1", "value2"}}
Field contains a substring "value"{"fieldName":{"$contains":"value"}}
Field is not equal to "value"{"fieldName":{"$ne":"value"}}
Field is greater than "value"{"fieldName":{"$gt":"value"}}
Field is greater than or equal to "value"{"fieldName":{"$gte":"value"}}
Field is less than "value"{"fieldName":{"$lt":"value"}}
Field is less than or equal to "value"{"fieldName":{"$lte":"value"}}
Field matches a regular expression (case-sensitive){"fieldName":{"$regex":"regex"}}
Field matches a regular expression (case-insensitive){"fieldName":{"$regex":"regex", "$options":"i"}}
Field exists (does not contain a null value){"fieldName":{"$exists":true}}
Field is NULL{"fieldName":{"$exists":false}}
Combining filter expressions with AND{"$and": filter1, filter2, ... }
Combining filter expressions with OR{"$or": filter1, filter2, ... }
Inverting a filter expression{"$not":{ filter }}
Field is greater than or equal to 2 and less than 5{"fieldName":{"$gte":2, "$lt":5}} or {"$and": {"fieldName":{"$gte":2}}, {"fieldName":{"$lt":5}} }

Some Methods that use Filters

Filter JSON Example

var fieldEquals = {
    filter: { "id": "3002" }
};

var fieldIsNull = {
    filter: { "acctstoptime": { "$exists": false } }
};

var simpleOr = {
    filter: { '$or': [{ 'username': 'email@address.com' }, {'sponsor_name': 'admin' }] }
}

Data Types

initOptions

TypeNameDescription
stringhostThe IP or DNS name of the ClearPass host.
stringclientIdThe OAuth2 Client Id.
stringclientSecretThe OAuthe2 Client Secret.
stringtokenA valid authentication token. Only used if you do not supply a Client Id and Secret.
booleansslValidationShould SSL Validation be used. Set to false for self signed certificates.
legacyInitOptionslegacyApiOptions specific for legacy APIs. (not needed for basic REST processes)

legacyInitOptions

TypeNameDescription
stringuserNameClearPass User Name for API access.
stringpasswordClearPass Password for API access.

searchOptions

TypeNameDescription
object / stringfilterThe search filter.
stringsortThe sort order of the results.
numberoffsetThe number of items to offset the returned results (for paging).
numberlimitTHe number of items to return (for paging).

apiClientOptions

TypeNameDescription
stringaccess_lifetime(string, optional): Lifetime of an OAuth2 access token
stringaccess_token_lifetime(string): Specify the lifetime of an OAuth2 access token
stringaccess_token_lifetime_units(string): Specify the lifetime of an OAuth2 access token
stringauto_confirm(integer, optional): Not supported at this time
stringclient_description(string, optional): Use this field to store comments or notes about this API client
stringclient_id(string): The unique string identifying this API client. Use this value in the OAuth2 “client_id” parameter
stringclient_public(boolean, optional): Public clients have no client secret
stringclient_refresh(boolean, optional): An OAuth2 refresh token may be used to obtain an updated access token. Use grant_type=refresh_token for this
stringclient_secret(string, optional): Use this value in the OAuth2 "client_secret" parameter. NOTE: This value is encrypted when stored and cannot be retrieved.
stringenabled(boolean, optional): Enable API client
stringid(string): The unique string identifying this API client. Use this value in the OAuth2 "client_id" parameter
stringgrant_types(string): Only the selected authentication method will be permitted for use with this client ID
stringprofile_id(integer): The operator profile applies role-based access control to authorized OAuth2 clients. This determines what API objects and methods are available for use
stringprofile_name(string, optional): Name of operator profile
stringredirect_uri(string, optional): Not supported at this time
stringrefresh_lifetime(string, optional): Lifetime of an OAuth2 refresh token
stringrefresh_token_lifetime(string): Specify the lifetime of an OAuth2 refresh token
stringrefresh_token_lifetime_units(string): Specify the lifetime of an OAuth2 refresh token
stringscope(string, optional): Not supported at this time
stringuser_id(string, optional): Not supported at this time

guestManagerConfig

TypeNameDescription
stringrandom_username_method(string) = 'nwa_digits_password' or 'nwa_letters_password' or 'nwa_lettersdigits_password' or 'nwa_picture_password' or 'nwa_sequence': The method used to generate random account usernames
stringrandom_username_multi_prefix(string, optional): Identifier string to prepend to usernames. Dynamic entries based on a user attribute can be entered as '_' + attribute. For example '_role_name'. The username length will determine the length of the numeric sequence only. Recommend 4
stringrandom_username_picture(string, optional): Format picture (see below) describing the usernames that will be created for visitors. • Alphanumeric characters are passed through without modification. • '#' is replaced with a random digit 0-9. • '$' or '?' is replaced with a random letter A-Za-z • '_' is replaced with a random lowercase letter a-z • '^' is replaced with a random uppercase letter A-Z • '' is replaced with a random letter or digit A-Za-z0-9. • '!' is replaced with a random punctuation symbol excluding apostrophe, quotes • '&' is replaced with a random character (union of sets ! and ) • '@' is replaced with a random letter or digit, excluding vowels • '%' is replaced with a random letter or digit, excluding vowels and anything that looks like another (il1, B8, O0, Z2)
stringrandom_username_length(integer): The length, in characters, of generated account usernames
objectguest_initial_sequence_options(object, optional): Create multi next available sequence number. These values will be used when multi_initial_sequence is set to -1
stringrandom_password_method(string) = 'nwa_digits_password' or 'nwa_letters_password' or 'nwa_lettersdigits_password' or 'nwa_alnum_password' or 'nwa_strong_password' or 'nwa_complex_password' or 'nwa_complexity_password' or 'nwa_words_password' or 'nwa_picture_password': The method used to generate a random account password
stringrandom_password_picture(string, optional): Format picture (see below) describing the passwords that will be created for visitors. • Alphanumeric characters are passed through without modification. • '#' is replaced with a random digit 0-9. • '$' or '?' is replaced with a random letter A-Za-z • '_' is replaced with a random lowercase letter a-z • '^' is replaced with a random uppercase letter A-Z • '' is replaced with a random letter or digit A-Za-z0-9. • '!' is replaced with a random punctuation symbol excluding apostrophe, quotes • '&' is replaced with a random character (union of sets ! and ) • '@' is replaced with a random letter or digit, excluding vowels • '%' is replaced with a random letter or digit, excluding vowels and anything that looks like another (il1, B8, O0, Z2)
numberrandom_password_length(integer): Number of characters to include in randomly-generated account passwords
stringguest_password_complexity(string) = 'none' or 'case' or 'number' or 'alphanumeric' or 'casenumeric' or 'punctuation' or 'complex': Password complexity to enforce for manually-entered guest passwords. Requires the random password type 'A password matching the password complexity requirements' and the field validator 'NwaIsValidPasswordComplexity' for manual password entry
stringguest_password_minimum(integer): The minimum number of characters that a guest password must contain
stringguest_password_disallowed(string, optional): Characters which cannot appear in a user-generated password
stringguest_password_disallowed_words(string, optional): Comma separated list of words disallowed in the random words password generator. Note there is an internal exclusion list built into the server
booleanguest_log_account_password(boolean, optional): Whether to record passwords for guest accounts in the application log
booleanguest_view_account_password(boolean, optional): If selected, guest account passwords may be displayed in the list of guest accounts. This is only possible if operators have the View Passwords privilege
numberguest_do_expire(integer) = '4' or '3' or '2' or '1': Default action to take when the expire_time is reached. Note that a logout can only occur if the NAS is RFC-3576 compliant
objectguest_account_expiry_options(object): The available options to select from when choosing the expiration time of a guest account (expire_after). Expiration times are specified in hours
objectguest_modify_expire_time_options(object): The available options to select from when modifying an account's expiration (modify_expire_time). Note some items may be dynamically removed based on the state of the account
objectguest_lifetime_options(object): The available options to select from when choosing the lifetime of a guest account (expire_postlogin). Lifetime values are specified in minutes
booleang_action_notify_account_expire_enabled(boolean, optional): If checked, users will receive an email notification when their device's network credentials are due to expire
numberg_action_notify_account_expiration_duration(integer, optional): Account expiration emails are sent this many days before the account expires. Enter a value between 1 and 30
stringg_action_notify_account_expire_email_unknown(string, optional) = 'none' or 'fixed' or 'domain': Specify where to send emails if the user's account doesn't have an email address recorded
stringg_action_notify_account_expire_email_unknown_fixed(string, optional): Address used when no email address is known for a user
stringg_action_notify_account_expire_email_unknown_domain(string, optional): Domain to append to the username to form an email address
stringg_action_notify_account_expire_subject(string, optional): Enter a subject for the notification email
numberg_action_notify_account_expire_message(integer, optional) = '2' or '11' or '5' or '6' or '1' or '3' or '7' or '8' or '10' or '9' or '4': The plain text or HTML print template to use when generating an email message
stringg_action_notify_account_expire_skin(string, optional) = '' or 'plaintext' or 'html_embedded' or 'receipt' or 'default' or 'Aruba Amigopod Skin' or 'Blank Skin' or 'ClearPass Guest Skin' or 'Custom Skin 1' or 'Custom Skin 2' or 'Galleria Skin' or 'Galleria Skin 2': The format in which to send email receipts
stringg_action_notify_account_expire_copies(string, optional) = 'never' or 'always_cc' or 'always_bcc': Specify when to send to the recipients in the Copies To list
stringg_action_notify_account_expire_copies_to(string, optional): An optional list of email addresses to which copies of expiry notifications will be sent
stringsite_ssid(string, optional): The SSID of the wireless LAN, if applicable. This will appear on guest account print receipts
stringsite_wpa_key(string, optional): The WPA key for the wireless LAN, if applicable. This will appear on guest account print receipts
booleanguest_receipt_print_button(boolean, optional): Guest receipts can print simply by selecting the template in the dropdown, or by clicking a link
stringguest_account_terms_of_use_url(string, optional): The URL of a terms and conditions page. The URL will appear in any terms checkbox with: {nwa_global name=guest_account_terms_of_use_url} It is recommended to upload your terms in Content Manager, where the files will be referenced with the "public/" prefix. Alternatively, you can edit Terms and Conditions under Configuration > Pages > Web Pages. If your site is hosted externally, be sure the proper access control lists (ACLs) are in place. If terms are not required, it is recommended to edit the terms field on your forms to a UI type "hidden" and an Initial Value of 1
numberguest_active_sessions(integer, optional): Enable limiting the number of active sessions a guest account may have. Enter 0 to allow an unlimited number of sessions
stringguest_about_guest_network_access(string, optional): Template code to display on the Guest Manager start page, under the “About Guest Network Access” heading. Leave blank to use the default text, or enter a hyphen ("-") to remove the default text and the heading

guestSponsorResponse

TypeNameDescription
stringtoken(string): Registration token
stringregister_token(string): Registration token
booleanregister_reject(boolean, optional): Set to true to reject the sponsorship request
numberrole_id(integer, optional): Override the guest role
stringmodify_expire_time(string, optional): Override the guest expiration time
stringconfirm_expire_time(string, optional): Timestamp for new expiration time; used if modify_expire_time is "expire_time"

randomPasswordOptions

TypeNameDescription
stringrandom_password_methodThe random password method to use.
numberrandom_password_lengthThe length of the password to be created.
stringrandom_password_pictureThe picture to be used for the nwa_picture_password method.

endpointObject

TypeNameDescription
numberidThe endpoint id.
stringmac_addressThe endpoints MAC Address.
stringdescriptionA description of the endpoint.
stringstatusThe endpoint status (Known, Unknown, Disabled).
objectattributesAdditional endpoint attributes.

instanceCreate

TypeNameDescription
stringstate(string, optional) = 'stopped' or 'running': Desired state of the extension
stringstore_id(string): ID from the extension store
stringfiles(object, optional): Maps extension file IDs to local content items, with "public:" or "private:" prefix

extensionLogOptions

TypeNameDescription
booleanstdoutInclude extension's standard-output messages
booleanstderrInclude extension's standard-error messages
numbersinceSpecify a UNIX timestamp to only return log entries since that time
booleantimestampsPrefix every log line with its UTC timestamp
stringtailReturn this number of lines at the end of the logs, or "all" for everything

attributeOptions

TypeNameDescription
numberid(integer, optional): Numeric ID of the attribute
stringname(string, optional): Name of the attribute
stringentity_name(string, optional) = 'Device' or 'LocalUser' or 'GuestUser' or 'Endpoint' or 'Onboard': Entity Name of the attribute
stringdata_type(string, optional) = 'Boolean' or 'Date' or 'Date-Time' or 'Day' or 'IPv4Address' or 'Integer' or 'List' or 'MACAddress' or 'String' or 'Text' or 'TimeOfDay': Data Type of the attribute
booleanmandatory(boolean, optional): Enable this to make this attribute mandatory for the entity
stringdefault_value(string, optional): Default Value of the attribute
booleanallow_multiple(boolean, optional): To Allow Multiple values of the atribute for Data Type String
stringallowed_value(string, optional): Allowed Value for Data Type List (e.g., example1,example2,example3)

contextServerAction

TypeNameDescription
numberid(integer, optional): Numeric ID of the Context Server Action
stringserver_type(string, optional) = 'Aruba Activate' or 'airwatch' or 'JAMF' or 'MobileIron' or 'MaaS360' or 'SAP Afaria' or 'SOTI' or 'Google Admin Console' or 'Palo Alto Networks Panorama' or 'Palo Alto Networks Firewall' or 'Juniper Networks SRX' or 'XenMobile' or 'Generic HTTP' or 'AirWave' or 'ClearPass Cloud Proxy': Server Type of the Context Server Action
stringserver_name(string, optional): Server Name of the Context Server Action
stringaction_name(string, optional): Action Name of the Context Server Action
stringdescription(string, optional): Description of the Context Server Action
stringhttp_method(string, optional) = 'GET' or 'POST' or 'PUT' or 'DELETE': Http method of the Context Server Action
booleanskip_http_auth(boolean, optional): Enable to skip HTTP Basic Authentication
stringurl(string, optional): URL of the Context Server Action
stringcontent_type(string, optional) = 'HTML' or 'JSON' or 'PLANE' or 'XML': Content-Type of the Context Server Action. Note : For CUSTOM type use any string
stringcontent(string, optional): Content of the Context Server Action
objectheaders(object, optional): Headers(key/value pairs) of the Context Server Action (e.g., {"attr_name":"key1","attr_value":"value1"},{"attr_name":"key2","attr_value":"value2"})
objectattributes(object, optional): Attributes(key/value pairs) of the Context Server Action (e.g., {"attr_name":"key1","attr_value":"value1"},{"attr_name":"key2","attr_value":"value2"})

fingerprint

TypeNameDescription
numberid(integer, optional): Id of the fingerprint
stringcategory(string, optional): Category name of the fingerprint
stringfamily(string, optional): Family name of the fingerprint
stringname(string, optional): Unique name of the fingerprint

SNMPReadSettings

TypeNameDescription
booleanforce_read(boolean, optional): Enable to always read information from this device
booleanread_arp_info(boolean, optional): Enable to read ARP table from this device
stringzone_name(string, optional): Policy Manager Zone name to be associated with the network device
stringsnmp_version(string, optional) = 'V1' or 'V2C' or 'V3': SNMP version of the network device
stringcommunity_string(string, optional): Community string of the network device
stringsecurity_level(string, optional) = 'NOAUTH_NOPRIV' or 'AUTH_NOPRIV' or 'AUTH_PRIV': Security level of the network device
stringuser(string, optional): Username of the network device
stringauth_protocol(string, optional) = 'MD5' or 'SHA': Authentication protocol of the network device
stringauth_key(string, optional): Authentication key of the network device
stringprivacy_protocol(string, optional) = 'DES_CBC' or 'AES_128': Privacy protocol of the network device
stringprivacy_key(string, optional): Privacy key of the network device

SNMPWriteSettings

TypeNameDescription
numberdefault_vlan(integer, optional): Default VLAN for port when SNMP-enforced session expires
stringsnmp_version(string, optional) = 'V1' or 'V2C' or 'V3': SNMP version of the network device
stringcommunity_string(string, optional): Community string of the network device
stringsecurity_level(string, optional) = 'NOAUTH_NOPRIV' or 'AUTH_NOPRIV' or 'AUTH_PRIV': Security level of the network device
stringuser(string, optional): Username of the network device
stringauth_protocol(string, optional) = 'MD5' or 'SHA': Authentication protocol of the network device
stringauth_key(string, optional): Authentication key of the network device
stringprivacy_protocol(string, optional) = 'DES_CBC' or 'AES_128': Privacy protocol of the network device
stringprivacy_key(string, optional): Privacy key of the network device

CLISettings

TypeNameDescription
stringtype(string, optional) = 'SSH' or 'Telnet': Access type of the network device
numberport(integer, optional): SSH/Telnet port number of the network device
stringusername(string, optional): Username of the network device
stringpassword(string, optional): Password of the network device
stringusername_prompt_regex(string, optional): Username prompt regex of the network device
stringpassword_prompt_regex(string, optional): Password prompt regex of the network device
stringcommand_prompt_regex(string, optional): Command prompt regex of the network device
stringenable_prompt_regex(string, optional): Enable prompt regex of the network device
stringenable_password(string, optional): Enable password of the network device

OnConnectEnforcementSettings

TypeNameDescription
booleanenabled(boolean, optional): Flag indicating if the network device is enabled with OnConnect Enforcement. SNMP read configuration and Policy Manager Zone is a must for this to work.
stringports(string, optional): Port names used in OnConnect Enforcement in CSV format (e.g.,FastEthernet 1/0/10).Use empty string to enable for all ports. Ports determined to be uplink or trunk ports will be ignored.

NetworkDevice

TypeNameDescription
numberid(integer, optional): Numeric ID of the network device
stringdescription(string, optional): Description of the network device
stringname(string, optional): Name of the network device
stringip_address(string, optional): IP or Subnet Address of the network device
stringradius_secret(string, optional): RADIUS Shared Secret of the network device
stringtacacs_secret(string, optional): TACACS+ Shared Secret of the network device
stringvendor_name(string, optional): Vendor Name of the network device
booleancoa_capable(boolean, optional): Flag indicating if the network device is capable of CoA
numbercoa_port(integer, optional): CoA port number of the network device
SNMPReadSettingssnmp_read(SNMPReadSettings, optional): SNMP read settings of the network device
SNMPWriteSettingssnmp_write(SNMPWriteSettings, optional): SNMP write settings of the network device
CLISettingscli_config(CLISettings, optional): CLI Configuration details of the network device
OnConnectEnforcementSettingsonConnect_enforcement(OnConnectEnforcementSettings, optional): OnConnect Enforcement settings of the network device
stringattributes(object, optional): Additional attributes(key/value pairs) may be stored with the network device

OnboardDevice

TypeNameDescription
numberid(integer, optional): Numeric ID of the device
stringstatus(string, optional) = 'allowed' or 'pending' or 'denied': Determines whether the device is able to enroll and access the network
stringdevice_type(string, optional) = 'Other' or 'Android' or 'iOS' or 'OS X' or 'Windows' or 'Ubuntu' or 'Chromebook' or 'Web' or 'External': Device type
stringdevice_name(string, optional): Device name
stringdevice_udid(string, optional): Unique device identifier
stringdevice_imei(string, optional): International Mobile Station Equipment Identity, if available
stringdevice_iccid(string, optional): SIM card unique serial number, if available
stringdevice_serial(string, optional): Serial number of the device, if available
stringproduct_name(string, optional): Product name of the device, if available
stringproduct_version(string, optional): Product version string of the device, if available
string[]mac_address(arraystring, optional): List of MAC addresses associated with the device
stringserial_number(string, optional): Serial number of device certificate, if device type is "External"
stringusernames(string, optional): Usernames that have enrolled this device
booleanenrolled(boolean, optional): Flag indicating device has been provisioned and currently has a valid certificate
stringexpanded_type(string, optional): Marketing name for the product
stringmdm_managed(string, optional): Mobile device management (MDM) vendor name, if an endpoint context server reports the device as managed
stringdevice_identifier(string, optional): Unique identifier string

OnboardUser

TypeNameDescription
numberid(integer, optional): Numeric ID of the user
stringstatus(string, optional) = 'allowed' or 'denied': Determines whether the user can enroll devices
stringusername(string, optional): Username of the user
numberdevice_count(undefined, optional): Number of devices enrolled by this user

DeviceProfileDhcp

TypeNameDescription
stringoption55(string, optional)
stringoption60(string, optional)
stringoptions(string, optional)

DeviceProfileActiveSync

TypeNameDescription
stringdevice_type(string, optional)
stringuser_agent(string, optional)

DeviceProfileHost

TypeNameDescription
stringos_type(string, optional)
stringuser_agent(string, optional)

DeviceProfileSnmp

TypeNameDescription
stringsys_descr(string, optional)
stringdevice_type(string, optional)
stringcdp_cache_platform(string, optional)

DeviceProfileDevice

TypeNameDescription
stringcategory(string, optional)
stringfamily(string, optional)
stringname(string, optional)

DeviceProfile

TypeNameDescription
stringmac(string, optional): MAC Address of the Endpoint
stringip(string, optional) IP Address of the Endpoint
DeviceProfileDhcpdhcp(object, optional): dhcp information for the Endpoint
stringhostname(string, optional): Hostname of the Endpoint
DeviceProfileActiveSyncactive_sync(object, optional): Active Sync details of the Endpoint
DeviceProfileHosthost(object, optional): Host details of the Endpoint
DeviceProfileSnmpsnmp(object, optional): SNMP details of the Endpoint
DeviceProfileDevicedevice(object, optional): Device details of the Endpoint

LocalUser

TypeNameDescription
numberid(integer, optional): Numeric ID of the local user
stringuser_id(string, optional): Unique user id of the local user
stringpassword(string, optional): Password of the local user
stringusername(string, optional): User name of the local user
stringrole_name(string, optional): Role name of the local user
booleanenabled(boolean, optional): Flag indicating if the account is enabled
booleanchange_pwd_next_login(boolean, optional): Flag indicating if the password change is required in next login
objectattributes(object, optional): Additional attributes(key/value pairs) may be stored with the local user account

Samples

Get ClearPass Version Information

var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false
});

client.getServerVersion(function (error, data, statusCode) {
    if (error) {
        console.log(error.message);
    }
    else {
        console.log(JSON.stringify(data, null, 2));
    }
});

Response

{
  "cppm_version": "6.6.5.93247",
  "guest_version": "6.6.5.33851",
  "installed_patches": [
    {
      "name": "20160415-vulnerability-fixes",
      "description": "ClearPass patch to fix Samba vulnerability CVE-2016-2118",
      "installed": "2016-05-12T13:24:33+00:00"
    },
    ...
  ]
}

Get and Disconnect an Active Session

var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false
});

var o = {
    filter: { "acctstoptime": { "$exists": false } },
    sort: '-id',
    offset: 0,
    limit: 1
};

client.getGuestSessions(o, function (error, data, statusCode) {
    if (error) {
        console.log(error.message);
    }
    else {
        console.log(JSON.stringify(data, null, 2));

        if (data.items && data.items.length > 0) {
            var sessionId = data.items[0].id;

            console.log('Attempting to disconnect session "' + sessionId + '".');

            client.disconnectSession(sessionId, function (error, resp) {
                if (error) {
                    console.log(error.message);
                }
                else {
                    console.log(JSON.stringify(resp, null, 2));
                }
            });
        }
    }
});

Get Information About an Installed Extension

var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false
});

client.getExtension('5b8f5597-0dac-4b44-b97e-f2cbf684e705', function (error, data, statusCode) {
    if (error) {
        console.log(error.message);
    }
    else {
        console.log(JSON.stringify(data, null, 2));
    }
});

Response

{
  "id": "5b8f5597-0dac-4b44-b97e-f2cbf684e705",
  "state": "running",
  "state_details": "Started 10 days ago",
  "store_id": "0c1b...d4e",
  "name": "auth-proxy",
  "version": "1.0.0",
  "description": "Generic Auth Proxy (OAuth2, JWT)",
  "icon_href": "...",
  "hostname": "6586daf514c7",
  "network_ports": [],
  "extension_hrefs": [],
  "files": [],
  "internal_ip_address": "172.17.0.2"
}

Legacy API: Profile an Endpoint

var client = new CppmApi({
    host: '127.0.0.1',
    clientId: 'CPPM-API',
    clientSecret: 'cyvD9...JbAE',
    sslValidation: false,
    legacyApi: {
        userName: 'admin_user',
        password: 'admin_pwd'
    }
});

var profileInfo = {
    mac: '001122334455',
    device: {
        category: 'SmartDevice',
        family: 'Apple',
        name: 'Apple iPhone'
    }
};

client.profileEndpoint(profileInfo, function (error, data, statusCode) {
    console.log(data);

    if (error) {
        console.log(error.message);
    }
});

Change Details

VersionDetails
2.0.0Added promise based functionality and switched from request to axios. Updated to using classes.
2.1.0

1 year ago

2.0.3

3 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.5.2

6 years ago

1.5.1

6 years ago

1.5.0

6 years ago

1.4.0

7 years ago

1.3.0

7 years ago

1.2.0

7 years ago

1.1.0

7 years ago

1.0.0

7 years ago