auth0
Version:
SDK for Auth0 API v2
1,723 lines (1,631 loc) • 110 kB
JavaScript
/** @module management */
var util = require('util');
var utils = require('../utils');
var jsonToBase64 = utils.jsonToBase64;
var generateClientInfo = utils.generateClientInfo;
var ArgumentError = require('rest-facade').ArgumentError;
// Managers.
var ClientsManager = require('./ClientsManager');
var ClientGrantsManager = require('./ClientGrantsManager');
var GrantsManager = require('./GrantsManager');
var UsersManager = require('./UsersManager');
var UserBlocksManager = require('./UserBlocksManager');
var ConnectionsManager = require('./ConnectionsManager');
var BlacklistedTokensManager = require('./BlacklistedTokensManager');
var RulesManager = require('./RulesManager');
var DeviceCredentialsManager = require('./DeviceCredentialsManager');
var EmailProviderManager = require('./EmailProviderManager');
var StatsManager = require('./StatsManager');
var TenantManager = require('./TenantManager');
var JobsManager = require('./JobsManager');
var TicketsManager = require('./TicketsManager');
var LogsManager = require('./LogsManager');
var LogStreamsManager = require('./LogStreamsManager');
var ResourceServersManager = require('./ResourceServersManager');
var ManagementTokenProvider = require('./ManagementTokenProvider');
var RulesConfigsManager = require('./RulesConfigsManager');
var EmailTemplatesManager = require('./EmailTemplatesManager');
var GuardianManager = require('./GuardianManager');
var CustomDomainsManager = require('./CustomDomainsManager');
var RolesManager = require('./RolesManager');
var HooksManager = require('./HooksManager');
var BrandingManager = require('./BrandingManager');
var MigrationsManager = require('./MigrationsManager');
var PromptsManager = require('./PromptsManager');
var BASE_URL_FORMAT = 'https://%s/api/v2';
var MANAGEMENT_API_AUD_FORMAT = 'https://%s/api/v2/';
/**
* @class ManagementClient
* Management API SDK.
*
* The Auth0 Management API is meant to be used by back-end servers or trusted
* parties performing administrative tasks. Generally speaking, anything that
* can be done through the Auth0 dashboard (and more) can also be done through
* this API.
* @constructor
* @memberOf module:management
*
* @example <caption>
* Initialize your client class with an API v2 token (you can generate one
* <a href="https://auth0.com/docs/apiv2">here</a>) and a domain.
* </caption>
*
* var ManagementClient = require('auth0').ManagementClient;
* var auth0 = new ManagementClient({
* domain: '{YOUR_ACCOUNT}.auth0.com',
* token: '{YOUR_API_V2_TOKEN}'
* });
*
*
* @example <caption>
* Initialize your client class, by using a Non Interactive Client to fetch an access_token
* via the Client Credentials Grant.
* </caption>
*
* var ManagementClient = require('auth0').ManagementClient;
* var auth0 = new ManagementClient({
* domain: '{YOUR_ACCOUNT}.auth0.com',
* clientId: '{YOUR_NON_INTERACTIVE_CLIENT_ID}',
* clientSecret: '{YOUR_NON_INTERACTIVE_CLIENT_SECRET}',
* scope: "read:users write:users",
* audience: 'https://{YOUR_TENANT_NAME}.auth0.com/api/v2/',
* tokenProvider: {
* enableCache: true,
* cacheTTLInSeconds: 10
* }
* });
*
* @param {Object} options Options for the ManagementClient SDK.
* If a token is provided only the domain is required, other parameters are ignored.
* If no token is provided domain, clientId, clientSecret and scopes are required
* @param {String} options.domain ManagementClient server domain.
* @param {String} [options.token] API access token.
* @param {String} [options.clientId] Management API Non Interactive Client Id.
* @param {String} [options.clientSecret] Management API Non Interactive Client Secret.
* @param {String} [options.audience] Management API Audience. By default is your domain's, e.g. the domain is `tenant.auth0.com` and the audience is `http://tenant.auth0.com/api/v2/`
* @param {String} [options.scope] Management API Scopes.
* @param {Boolean} [options.tokenProvider.enableCache=true] Enabled or Disable Cache.
* @param {Number} [options.tokenProvider.cacheTTLInSeconds] By default the `expires_in` value will be used to determine the cached time of the token, this can be overridden.
* @param {Boolean} [options.retry.enabled=true] Enabled or Disable Retry Policy functionality.
* @param {Number} [options.retry.maxRetries=10] Retry failed requests X times.
* @param {Object} [options.headers] Additional headers that will be added to the outgoing requests.
*
*/
var ManagementClient = function(options) {
if (!options || typeof options !== 'object') {
throw new ArgumentError('Management API SDK options must be an object');
}
if (!options.domain || options.domain.length === 0) {
throw new ArgumentError('Must provide a domain');
}
var baseUrl = util.format(BASE_URL_FORMAT, options.domain);
var userAgent = options.userAgent || 'node.js/' + process.version.replace('v', '');
var defaultHeaders = {
'User-Agent': 'node.js/' + process.version.replace('v', ''),
'Content-Type': 'application/json'
};
var managerOptions = {
headers: Object.assign(defaultHeaders, options.headers || {}),
baseUrl: baseUrl
};
if (options.token === undefined) {
var config = Object.assign(
{ audience: util.format(MANAGEMENT_API_AUD_FORMAT, options.domain) },
options
);
if (options.tokenProvider) {
config.enableCache = options.tokenProvider.enableCache;
config.cacheTTLInSeconds = options.tokenProvider.cacheTTLInSeconds;
delete config.tokenProvider;
}
this.tokenProvider = new ManagementTokenProvider(config);
managerOptions.tokenProvider = this.tokenProvider;
} else if (typeof options.token !== 'string' || options.token.length === 0) {
throw new ArgumentError('Must provide a token');
} else {
this.tokenProvider = {
getAccessToken: function() {
return Promise.resolve(options.token);
}
};
managerOptions.headers['Authorization'] = 'Bearer ' + options.token;
}
if (options.telemetry !== false) {
var clientInfo = options.clientInfo || generateClientInfo();
if ('string' === typeof clientInfo.name && clientInfo.name.length > 0) {
var telemetry = jsonToBase64(clientInfo);
managerOptions.headers['Auth0-Client'] = telemetry;
}
}
managerOptions.retry = options.retry;
/**
* Simple abstraction for performing CRUD operations on the
* clients endpoint.
*
* @type {ClientsManager}
*/
this.clients = new ClientsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the client grants
* endpoint.
*
* @type {ClientGrantsManager}
*/
this.clientGrants = new ClientGrantsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the grants
* endpoint.
*
* @type {GrantsManager}
*/
this.grants = new GrantsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* users endpoint.
*
* @type {UsersManager}
*/
this.users = new UsersManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* user-blocks endpoint.
*
* @type {UserBlocksManager}
*/
this.userBlocks = new UserBlocksManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* guardian endpoint.
*
* @type {GuardianManager}
*/
this.guardian = new GuardianManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* custom domains endpoint.
*
* @type {CustomDomainsManager}
*/
this.customDomains = new CustomDomainsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* connections endpoint.
*
* @type {ConnectionsManager}
*/
this.connections = new ConnectionsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* device credentials endpoint.
*
* @type {DeviceCredentialsManager}
*/
this.deviceCredentials = new DeviceCredentialsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* rules endpoint.
*
* @type {RulesManager}
*/
this.rules = new RulesManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* blacklisted tokens endpoint.
*
* @type {BlacklistedtokensManager}
*/
this.blacklistedTokens = new BlacklistedTokensManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* email provider endpoint.
*
* @type {EmailProviderManager}
*/
this.emailProvider = new EmailProviderManager(managerOptions);
/**
* ManagementClient account statistics manager.
*
* @type {StatsManager}
*/
this.stats = new StatsManager(managerOptions);
/**
* ManagementClient tenant settings manager.
*
* @type {TenantManager}
*/
this.tenant = new TenantManager(managerOptions);
/**
* Jobs manager.
*
* @type {JobsManager}
*/
this.jobs = new JobsManager(managerOptions);
/**
* Tickets manager.
*
* @type {TicketsManager}
*/
this.tickets = new TicketsManager(managerOptions);
/**
* Logs manager.
*
* @type {LogsManager}
*/
this.logs = new LogsManager(managerOptions);
/**
* Log Streams manager.
*
* @type {LogStreamsManager}
*/
this.logStreams = new LogStreamsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* resource servers endpoint.
*
* @type {ResourceServersManager}
*/
this.resourceServers = new ResourceServersManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on
* Auth0's Email Templates
*
* @type {EmailTemplatesManager}
*/
this.emailTemplates = new EmailTemplatesManager(managerOptions);
/**
* RulesConfigs manager.
*
* @type {RulesConfigsManager}
*/
this.rulesConfigs = new RulesConfigsManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* roles endpoint.
*
* @type {RolesManager}
*/
this.roles = new RolesManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* hooks endpoint.
*
* @type {HooksManager}
*/
this.hooks = new HooksManager(managerOptions);
/**
* Simple abstraction for performing CRUD operations on the
* branding endpoint.
*
* @type {HooksManager}
*/
this.branding = new BrandingManager(managerOptions);
/**
* ManagementClient migrations manager.
*
* @type {MigrationsManager}
*/
this.migrations = new MigrationsManager(managerOptions);
/**
* Prompts Manager
*
* @type {PromptsManager}
*/
this.prompts = new PromptsManager(managerOptions);
};
/**
* Get all connections.
*
* @method getConnections
* @memberOf module:management.ManagementClient.prototype
*
* @example <caption>
* This method takes an optional object as first argument that may be used to
* specify pagination settings. If pagination options are not present,
* the first page of a limited number of results will be returned.
* </caption>
*
* // Pagination settings.
* var params = {
* per_page: 10,
* page: 0
* };
*
* management.getConnections(params, function (err, connections) {
* console.log(connections.length);
* });
*
* @param {Object} [params] Connections params.
* @param {Number} [params.per_page] Number of results per page.
* @param {Number} [params.page] Page number, zero indexed.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getConnections', 'connections.getAll');
/**
* Create a new connection.
*
* @method createConnection
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.createConnection(data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Connection created.
* });
*
* @param {Object} data Connection data object.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'createConnection', 'connections.create');
/**
* Get an Auth0 connection.
*
* @method getConnection
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getConnection({ id: CONNECTION_ID }, function (err, connection) {
* if (err) {
* // Handle error.
* }
*
* console.log(connection);
* });
*
* @param {Object} params Connection parameters.
* @param {String} params.id Connection ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getConnection', 'connections.get');
/**
* Delete an existing connection.
*
* @method deleteConnection
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.deleteConnection({ id: CONNECTION_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Connection deleted.
* });
*
* @param {Object} params Connection parameters.
* @param {String} params.id Connection ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteConnection', 'connections.delete');
/**
* Update an existing connection.
*
* @method updateConnection
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var data = { name: 'newConnectionName' };
* var params = { id: CONNECTION_ID };
*
* management.updateConnection(params, data, function (err, connection) {
* if (err) {
* // Handle error.
* }
*
* console.log(connection.name); // 'newConnectionName'
* });
*
* @param {Object} params Connection parameters.
* @param {String} params.id Connection ID.
* @param {Object} data Updated connection data.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateConnection', 'connections.update');
/**
* Get all Auth0 clients.
*
* @method getClients
* @memberOf module:management.ManagementClient.prototype
*
* @example <caption>
* This method takes an optional object as first argument that may be used to
* specify pagination settings. If pagination options are not present,
* the first page of a limited number of results will be returned.
* </caption>
*
* // Pagination settings.
* var params = {
* per_page: 10,
* page: 0
* };
*
* management.getClients(params, function (err, clients) {
* console.log(clients.length);
* });
*
* @param {Object} [params] Clients parameters.
* @param {Number} [params.per_page] Number of results per page.
* @param {Number} [params.page] Page number, zero indexed.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getClients', 'clients.getAll');
/**
* Get an Auth0 client.
*
* @method getClient
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getClient({ client_id: CLIENT_ID }, function (err, client) {
* if (err) {
* // Handle error.
* }
*
* console.log(client);
* });
*
* @param {Object} params Client parameters.
* @param {String} params.client_id Application client ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getClient', 'clients.get');
/**
* Create an Auth0 client.
*
* @method createClient
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.createClient(data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Client created.
* });
*
* @param {Object} data The client data object.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'createClient', 'clients.create');
/**
* Update an Auth0 client.
*
* @method updateClient
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var data = { name: 'newClientName' };
* var params = { client_id: CLIENT_ID };
*
* management.updateClient(params, data, function (err, client) {
* if (err) {
* // Handle error.
* }
*
* console.log(client.name); // 'newClientName'
* });
*
* @param {Object} params Client parameters.
* @param {String} params.client_id Application client ID.
* @param {Object} data Updated client data.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateClient', 'clients.update');
/**
* Delete an Auth0 client.
*
* @method deleteClient
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.deleteClient({ client_id: CLIENT_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Client deleted.
* });
*
* @param {Object} params Client parameters.
* @param {String} params.client_id Application client ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteClient', 'clients.delete');
/**
* Get all Auth0 Client Grants.
*
* @method getClientGrants
* @memberOf module:management.ManagementClient.prototype
*
* @example <caption>
* This method takes an optional object as first argument that may be used to
* specify pagination settings. If pagination options are not present,
* the first page of a limited number of results will be returned.
* </caption>
*
* // Pagination settings.
* var params = {
* per_page: 10,
* page: 0
* };
*
* management.getClientGrants(params, function (err, grants) {
* console.log(grants.length);
* });
*
* @param {Object} [params] Client Grants parameters.
* @param {Number} [params.per_page] Number of results per page.
* @param {Number} [params.page] Page number, zero indexed.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getClientGrants', 'clientGrants.getAll');
/**
* Create an Auth0 client grant.
*
* @method createClientGrant
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.clientGrants.create(data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Client grant created.
* });
*
* @param {Object} data The client data object.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'createClientGrant', 'clientGrants.create');
/**
* Update an Auth0 client grant.
*
* @method updateClientGrant
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var data = {
* client_id: CLIENT_ID,
* audience: AUDIENCE,
* scope: []
* };
* var params = { id: CLIENT_GRANT_ID };
*
* management.clientGrants.update(params, data, function (err, grant) {
* if (err) {
* // Handle error.
* }
*
* console.log(grant.id);
* });
*
* @param {Object} params Client parameters.
* @param {String} params.id Client grant ID.
* @param {Object} data Updated client data.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateClientGrant', 'clientGrants.update');
/**
* Delete an Auth0 client grant.
*
* @method deleteClientGrant
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.clientGrants.delete({ id: GRANT_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Grant deleted.
* });
*
* @param {Object} params Client parameters.
* @param {String} params.id Client grant ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteClientGrant', 'clientGrants.delete');
/**
* Get all Auth0 Grants.
*
* @method getGrants
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = {
* per_page: 10,
* page: 0,
* include_totals: true,
* user_id: USER_ID,
* client_id: CLIENT_ID,
* audience: AUDIENCE
* };
*
* management.getGrants(params, function (err, grants) {
* console.log(grants.length);
* });
*
* @param {Object} params Grants parameters.
* @param {Number} params.per_page Number of results per page.
* @param {Number} params.page Page number, zero indexed.
* @param {Boolean} params.include_totals true if a query summary must be included in the result, false otherwise. Default false;
* @param {String} params.user_id The user_id of the grants to retrieve.
* @param {String} params.client_id The client_id of the grants to retrieve.
* @param {String} params.audience The audience of the grants to retrieve.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getGrants', 'grants.getAll');
/**
* Delete an Auth0 grant.
*
* @method deleteGrant
* @memberOf module:management.GrantsManager.prototype
*
* @example
* var params = {
* id: GRANT_ID,
* user_id: USER_ID
* };
*
* management.deleteGrant(params, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Grant deleted.
* });
*
* @param {Object} params Grant parameters.
* @param {String} params.id Grant ID.
* @param {String} params.user_id The user_id of the grants to delete.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteGrant', 'grants.delete');
/**
* Create an Auth0 credential.
*
* @method createDevicePublicKey
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.createConnection(data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Credential created.
* });
*
* @param {Object} data The device credential data object.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(
ManagementClient,
'createDevicePublicKey',
'deviceCredentials.createPublicKey'
);
/**
* Get all Auth0 credentials.
*
* @method getDeviceCredentials
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = {user_id: "USER_ID"};
*
* management.getDeviceCredentials(params, function (err, credentials) {
* console.log(credentials.length);
* });
*
* @param {Object} params Credential parameters.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getDeviceCredentials', 'deviceCredentials.getAll');
/**
* Delete an Auth0 device credential.
*
* @method deleteDeviceCredential
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: CREDENTIAL_ID };
*
* management.deleteDeviceCredential(params, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Credential deleted.
* });
*
* @param {Object} params Credential parameters.
* @param {String} params.id Device credential ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteDeviceCredential', 'deviceCredentials.delete');
/**
* Get all rules.
*
* @method getRules
* @memberOf module:management.ManagementClient.prototype
*
* @example <caption>
* This method takes an optional object as first argument that may be used to
* specify pagination settings. If pagination options are not present,
* the first page of a limited number of results will be returned.
* </caption>
*
* // Pagination settings.
* var params = {
* per_page: 10,
* page: 0
* };
*
* management.getRules(params, function (err, rules) {
* console.log(rules.length);
* });
*
* @param {Object} [params] Rules parameters.
* @param {Number} [params.per_page] Number of results per page.
* @param {Number} [params.page] Page number, zero indexed.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getRules', 'rules.getAll');
/**
* Create a new rule.
*
* @method createRule
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.createRule(data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Rule created.
* });
*
* @param {Object} data Rule data object.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'createRule', 'rules.create');
/**
* Get an Auth0 rule.
*
* @method getRule
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getRule({ id: RULE_ID }, function (err, rule) {
* if (err) {
* // Handle error.
* }
*
* console.log(rule);
* });
*
* @param {Object} params Rule parameters.
* @param {String} params.id Rule ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getRule', 'rules.get');
/**
* Delete an existing rule.
*
* @method deleteRule
* @memberOf module:management.ManagementClient.prototype
*
* @example
* auth0.deleteRule({ id: RULE_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Rule deleted.
* });
*
* @param {Object} params Rule parameters.
* @param {String} params.id Rule ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteRule', 'rules.delete');
/**
* Update an existing rule.
*
* @method updateRule
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: RULE_ID };
* var data = { name: 'my-rule'};
* management.updateRule(params, data, function (err, rule) {
* if (err) {
* // Handle error.
* }
*
* console.log(rule.name); // 'my-rule'.
* });
*
* @param {Object} params Rule parameters.
* @param {String} params.id Rule ID.
* @param {Object} data Updated rule data.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateRule', 'rules.update');
/**
* Get all users.
*
* @method getUsers
* @memberOf module:management.ManagementClient.prototype
*
* @example <caption>
* This method takes an optional object as first argument that may be used to
* specify pagination settings. If pagination options are not present,
* the first page of a limited number of results will be returned.
* </caption>
*
* // Pagination settings.
* var params = {
* search_engine: 'v3',
* q: 'name:*jane*',
* per_page: 10,
* page: 0
* };
*
* auth0.getUsers(params, function (err, users) {
* console.log(users.length);
* });
*
* @param {Object} [params] Users params.
* @param {Number} [params.search_engine] The version of the search engine to use.
* @param {String} [params.q] User Search string to filter which users are returned. Follows Lucene query string syntax as documented at https://auth0.com/docs/api/management/v2#!/Users/get_users.
* @param {Number} [params.per_page] Number of results per page.
* @param {Number} [params.page] Page number, zero indexed.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUsers', 'users.getAll');
/**
* Get users for a given email address
*
* @method getUsersByEmail
* @memberOf module:management.ManagementClient.prototype
*
* @example <caption>
* This method takes an email address as the first argument,
* and returns all users with that email address
* </caption>
*
* auth0.getUsersByEmail(email, function (err, users) {
* console.log(users);
* });
*
* @param {String} [email] Email address of user(s) to find
* @param {Object} [options] Additional options to pass to the endpoint
* @param {String} [options.fields] Comma-separated list of fields to include or exclude in the result
* @param {Boolean} [options.include_fields] Whether specified fields are to be included (true) or excluded (false). Defaults to true.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUsersByEmail', 'users.getByEmail');
/**
* Get a user by its id.
*
* @method getUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getUser({ id: USER_ID }, function (err, user) {
* console.log(user);
* });
*
* @param {Object} data The user data object.
* @param {String} data.id The user id.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUser', 'users.get');
/**
* Delete all users.
*
* @method deleteAllUsers
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.deleteAllUsers(function (err) {
* if (err) {
* // Handle error.
* }
*
* // Users deleted
* });
*
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*
* @deprecated This method will be removed in the next major release.
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteAllUsers', 'users.deleteAll');
/**
* Delete a user by its id.
*
* @method deleteUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.deleteUser({ id: USER_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User deleted.
* });
*
* @param {Object} params The user data object..
* @param {String} params.id The user id.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'deleteUser', 'users.delete');
/**
* Create a new user.
*
* @method createUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.createUser(data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User created.
* });
*
* @param {Object} data User data.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'createUser', 'users.create');
/**
* Update a user by its id.
*
* @method updateUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID };
*
* management.updateUser(params, data, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Updated user.
* console.log(user);
* });
*
* @param {Object} params The user parameters.
* @param {String} params.id The user id.
* @param {Object} data New user data.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateUser', 'users.update');
/**
* Update the user metadata for a user.
*
* @method updateUserMetadata
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID };
* var metadata = {
* address: '123th Node.js Street'
* };
*
* management.updateUserMetadata(params, metadata, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Updated user.
* console.log(user);
* });
*
* @param {Object} params The user data object..
* @param {String} params.id The user id.
* @param {Object} metadata New user metadata.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateUserMetadata', 'users.updateUserMetadata');
/**
* Update the app metadata for a user.
*
* @method updateAppMetadata
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID };
* var metadata = {
* foo: 'bar'
* };
*
* management.updateAppMetadata(params, metadata, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Updated user.
* console.log(user);
* });
*
* @param {Object} params The user data object..
* @param {String} params.id The user id.
* @param {Object} metadata New app metadata.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'updateAppMetadata', 'users.updateAppMetadata');
/**
* Delete a multifactor provider for a user.
*
* @method deleteUserMultifactor
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID, provider: MULTIFACTOR_PROVIDER };
*
* management.deleteUserMultifactor(params, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Users accounts unlinked.
* });
*
* @param {Object} params Data object.
* @param {String} params.id The user id.
* @param {String} params.provider Multifactor provider.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(
ManagementClient,
'deleteUserMultifactor',
'users.deleteMultifactorProvider'
);
/**
* Delete a multifactor provider for a user.
*
* @method deleteUserMultifcator
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID, provider: MULTIFACTOR_PROVIDER };
*
* management.deleteUserMultifcator(params, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Users accounts unlinked.
* });
*
* @param {Object} params Data object.
* @param {String} params.id The user id.
* @param {String} params.provider Multifactor provider.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*
* @deprecated The function name has a typo.
* We're shipping this so it doesn't break compatibility.
* Use {@link deleteUserMultifactor} instead.
*/
utils.wrapPropertyMethod(
ManagementClient,
'deleteUserMultifcator',
'users.deleteMultifactorProvider'
);
/**
* Unlink the given accounts.
*
* @method unlinkUsers
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID, provider: 'auht0', user_id: OTHER_USER_ID };
*
* management.unlinkUsers(params, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Users accounts unlinked.
* });
*
* @param {Object} params Linked users data.
* @param {String} params.id Primary user ID.
* @param {String} params.provider Identity provider in use.
* @param {String} params.user_id Secondary user ID.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'unlinkUsers', 'users.unlink');
/**
* Link the user with another account.
*
* @method linkUsers
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var userId = 'USER_ID';
* var params = {
* user_id: 'OTHER_USER_ID',
* connection_id: 'CONNECTION_ID'
* };
*
* management.linkUsers(userId, params, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // Users linked.
* });
*
* @param {String} userId ID of the primary user.
* @param {Object} params Secondary user data.
* @param {String} params.user_id ID of the user to be linked.
* @param {String} params.connection_id ID of the connection to be used.
* @param {String} params.provider Identity provider of the secondary user account being linked.
* @param {String} params.link_with JWT for the secondary account being linked. If sending this parameter, provider, user_id, and connection_id must not be sent.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'linkUsers', 'users.link');
/**
* Get user's log events.
*
* @method getUserLogs
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID, page: 0, per_page: 50, sort: 'date:-1', include_totals: true };
*
* management.getUserLogs(params, function (err, logs) {
* if (err) {
* // Handle error.
* }
*
* console.log(logs);
* });
*
* @param {Object} params Get logs data.
* @param {String} params.id User id.
* @param {Number} params.per_page Number of results per page.
* @param {Number} params.page Page number, zero indexed.
* @param {String} params.sort The field to use for sorting. Use field:order where order is 1 for ascending and -1 for descending. For example date:-1.
* @param {Boolean} params.include_totals true if a query summary must be included in the result, false otherwise. Default false;
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUserLogs', 'users.logs');
/**
* Get user's roles
*
* @method getUserRoles
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID, page: 0, per_page: 50, sort: 'date:-1', include_totals: true };
*
* management.getUserRoles(params, function (err, logs) {
* if (err) {
* // Handle error.
* }
*
* console.log(logs);
* });
*
* @param {Object} params Get roles data.
* @param {String} params.id User id.
* @param {Number} params.per_page Number of results per page.
* @param {Number} params.page Page number, zero indexed.
* @param {String} params.sort The field to use for sorting. Use field:order where order is 1 for ascending and -1 for descending. For example date:-1.
* @param {Boolean} params.include_totals true if a query summary must be included in the result, false otherwise. Default false;
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUserRoles', 'users.getRoles');
/**
* Assign roles to a user
*
* @method assignRolestoUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var parms = { id : 'USER_ID'};
* var data = { "roles" :["role1"]};
*
* management.assignRolestoUser(params, data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User assigned roles.
* });
*
* @param {Object} params params object
* @param {String} params.id user_id
* @param {Object} data data object containing list of role IDs
* @param {String} data.roles Array of role IDs
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'assignRolestoUser', 'users.assignRoles');
/**
* Assign users to a role
*
* @method assignUsersToRole
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id :'ROLE_ID'};
* var data = { "users" : ["userId1","userId2"]};
*
* management.roles.assignUsers(params, data, function (err, user) {
* if (err) {
* // Handle error.
* }
*
* // permissions added.
* });
*
* @param {String} params.id ID of the Role.
* @param {Object} data permissions data
* @param {String} data.permissions Array of permissions
* @param {String} data.permissions.permission_name Name of a permission
* @param {String} data.permissions.resource_server_identifier Identifier for a resource
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'assignUsersToRole', 'roles.assignUsers');
/**
* Remove roles from a user
*
* @method removeRolesFromUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var parms = { id : 'USER_ID'};
* var data = { "roles" :["role1"]};
*
* management.removeRolesFromUser(params, data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User assigned roles.
* });
*
* @param {Object} params params object
* @param {String} params.id user_id
* @param {String} data data object containing list of role IDs
* @param {String} data.roles Array of role IDs
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'removeRolesFromUser', 'users.removeRoles');
/**
* Get user's permissions
*
* @method getUserPermissions
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var params = { id: USER_ID, page: 0, per_page: 50, sort: 'date:-1', include_totals: true };
*
* management.getUserPermissions(params, function (err, logs) {
* if (err) {
* // Handle error.
* }
*
* console.log(logs);
* });
*
* @param {Object} params Get permissions data.
* @param {String} params.id User id.
* @param {Number} params.per_page Number of results per page.
* @param {Number} params.page Page number, zero indexed.
* @param {String} params.sort The field to use for sorting. Use field:order where order is 1 for ascending and -1 for descending. For example date:-1.
* @param {Boolean} params.include_totals true if a query summary must be included in the result, false otherwise. Default false;
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUserPermissions', 'users.getPermissions');
/**
* Assign permissions to a user
*
* @method assignPermissionsToUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var parms = { id : 'USER_ID'};
* var data = { "permissions" : [{"permission_name" :"do:something" ,"resource_server_identifier" :"test123" }]};
*
* management.assignPermissionsToUser(params, data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User assigned permissions.
* });
*
* @param {Object} params params object
* @param {String} params.id user_id
* @param {String} data data object containing list of permissions
* @param {String} data.permissions Array of permission IDs
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'assignPermissionsToUser', 'users.assignPermissions');
/**
* Remove permissions from a user
*
* @method removePermissionsFromUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* var parms = { id : 'USER_ID'};
* var data = { "permissions" : [{"permission_name" :"do:something" ,"resource_server_identifier" :"test123" }]};
*
* management.removePermissionsFromUser(params, data, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User assigned permissions.
* });
*
* @param {Object} params params object
* @param {String} params.id user_id
* @param {String} data data object containing list of permission IDs
* @param {String} data.permissions Array of permission IDs
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'removePermissionsFromUser', 'users.removePermissions');
/**
* Get a list of a user's Guardian enrollments.
*
* @method getGuardianEnrollments
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getGuardianEnrollments({ id: USER_ID }, function (err, enrollments) {
* console.log(enrollments);
* });
*
* @param {Object} data The user data object.
* @param {String} data.id The user id.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(
ManagementClient,
'getGuardianEnrollments',
'users.getGuardianEnrollments'
);
/**
* Generate new Guardian recovery code.
*
* @method regenerateRecoveryCode
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.regenerateRecoveryCode({ id: USER_ID }, function (err, newRecoveryCode) {
* console.log(newRecoveryCode);
* });
*
* @param {Object} data The user data object.
* @param {String} data.id The user id.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(
ManagementClient,
'regenerateRecoveryCode',
'users.regenerateRecoveryCode'
);
/**
* Invalidate all remembered browsers for MFA.
*
* @method invalidateRememberBrowser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.invalidateRememberBrowser({ id: USER_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // Invalidated all remembered browsers.
* });
*
* @param {Object} data The user data object.
* @param {String} data.id The user id.
* @param {Function} [cb] Callback function.
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(
ManagementClient,
'invalidateRememberBrowser',
'users.invalidateRememberBrowser'
);
/**
* Get user blocks by its id.
*
* @method getUserBlocks
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getUserBlocks({ id: USER_ID }, function (err, blocks) {
* if (err) {
* // Handle error.
* }
*
* console.log(blocks);
* });
*
* @param {Object} params The user data object..
* @param {String} params.id The user id.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'getUserBlocks', 'userBlocks.get');
/**
* Unblock an user by its id.
*
* @method unblockUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.unblockUser({ id: USER_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User unblocked.
* });
*
* @param {Object} params The user data object..
* @param {String} params.id The user id.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(ManagementClient, 'unblockUser', 'userBlocks.delete');
/**
* Get user blocks by its identifier.
*
* @method getUserBlocksByIdentifier
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.getUserBlocksByIdentifier({ identifier: USER_ID }, function (err, blocks) {
* if (err) {
* // Handle error.
* }
*
* console.log(blocks);
* });
*
* @param {Object} params The user data object..
* @param {String} params.identifier The user identifier, any of: username, phone_number, email.
* @param {Function} [cb] Callback function
*
* @return {Promise|undefined}
*/
utils.wrapPropertyMethod(
ManagementClient,
'getUserBlocksByIdentifier',
'userBlocks.getByIdentifier'
);
/**
* Unblock an user by its id.
*
* @method unblockUser
* @memberOf module:management.ManagementClient.prototype
*
* @example
* management.unblockUserByIdentifier({ identifier: USER_ID }, function (err) {
* if (err) {
* // Handle error.
* }
*
* // User unblocked.
* });
*
* @param {Object} params The user data object..
* @param {String} params.identifier The user identifier, any of: username, phone_number, email.
* @param {Function} [cb] Callback function
*