auth0-bundler

Bundle rules, scripts and hooks to deploy them to Auth0.

Usage no npm install needed!

<script type="module">
  import auth0Bundler from 'https://cdn.skypack.dev/auth0-bundler';
</script>

README

auth0-bundler

NPM version Build status License

Bundle rules, scripts and hooks to deploy them to Auth0.

This allows you to

  • test rules, scripts and hooks dedicated to be deployed to Auth0, as they can be required in node as well.
  • import other modules by using require statements with relative file paths. This way common functionality can be shared between rules.
  • write your rules using the whole ES2015 feature set, as the rules will be transpiled at bundle time.
  • pass in configuration at bundling time which can be used in your rule when it is executed.

API

createBundler

const createBundler = require('auth0-bundler');

const bundler = createBundler(options);

Options

  • nodeVersion: the node version that should be targeted (used for @babel/preset-env), the default is 4

bundler.bundleScript(injectedConfig, scriptFilename) -> Promise<bundledScript>

bundler.bundleRule(injectedConfig, ruleFilename) -> Promise<bundledRule>

bundler.bundleHook(injectedConfig, hookFilename) -> Promise<bundledHook>

Bundles a single script, rule or hook so it can be deployed to Auth0. The rule needs to be written as a commonjs module that exports a single function. This function takes an additional first parameter compared to being defined in Auth0: The injectedConfig that can be specified at bundle time. Modules required from the node_modules folder will not be bundled and will be required in the Auth0 environment as well. Auth0 provides a number of modules inside the Auth0 environment, to check whether a module can be required check webtaskio-canirequire.

Example:

Rule:

// my-rule.js
// Example rule to be deployed to auth0

// This dependency will be automatically bundled into the rule
const doRequest = require('../common/function');
// This dependency will be loaded using require
const R = require('ramda');

module.exports = function myRule(config, user, context, callback) {
    return doRequest(`${config.baseUrl}/some/endpoint`, user).then(function (result) {
        callback(null, R.merge({ some: 'result' }, result), context);
    });
};

Bundle dependencies:

const createBundler = require('auth0-bundler');
const bundler = createBundler();
const config = { baseUrl: 'https://www.example.com' };

bundler
    .bundleRule(config, `${__dirname}/my-rule.js`)
    .then(console.log);

Using auth0-bundler during deployment

This is an example on how to use auth0-bundler and the Auth0 Management API client to automatically deploy a rule using auth0-bundler. Like this you can automatically deploy rules e.g. during a CI run.

const ManagementClient = require('auth0').ManagementClient;
const management = new ManagementClient({
  token: '{YOUR_API_V2_TOKEN}',
  domain: '{YOUR_ACCOUNT}.auth0.com'
});
const createBundler = require('auth0-bundler');
const bundler = createBundler();
const config = { baseUrl: 'https://www.example.com' };

bundler.bundleRule(config, `${__dirname}/my-rule.js`).then((bundledRule) => {
    return management.createRule({
        enabled: true,
        name: 'my-rule',
        order: 1,
        stage: 'login_success',
        script: bundledRule
    });
});

License

This project is licensed under the MIT license. See the LICENSE file for more info.