Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cycloidio/auth0-rules-runtime
Wrapper of webtask runtime for helping to write tests for Auth0 rules
https://github.com/cycloidio/auth0-rules-runtime
auth0 auth0-rules runtime testing webtask
Last synced: 26 days ago
JSON representation
Wrapper of webtask runtime for helping to write tests for Auth0 rules
- Host: GitHub
- URL: https://github.com/cycloidio/auth0-rules-runtime
- Owner: cycloidio
- License: mit
- Created: 2017-05-05T16:16:37.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-07-17T10:50:20.000Z (over 7 years ago)
- Last Synced: 2024-09-10T14:26:22.718Z (about 2 months ago)
- Topics: auth0, auth0-rules, runtime, testing, webtask
- Language: JavaScript
- Homepage:
- Size: 80.1 KB
- Stars: 3
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Auth0 Rules Runtime
It's a wrapper of [webtask-runtime](https://github.com/auth0/webtask-runtime) for helping to write tests for [Auth0 rules](https://auth0.com/docs/rules).
## Considerations
This tool has been developed with NodeJS v7 and we don't think to add support for previous versions.
## Install
`npm install auth0-rules-runtime --save-dev`
NOTE _Yarn_ cannot be used because this tool run in NodeJS v7 (maybe in other previous version if it supports JS2015, but we haven't tried) and we use _auth0-authz-rules-api@^1.0.8_ NPM module for injecting the globals which the Auht0 rules can access, and through it we get a transient dependency (_tedious@~0.1.4_) which specifies that it doesn't support Node v7, so yarn rejects the installation.
We expect that this module won't affect in the rule testing, if you have a use case that it happens, please open an issue.
## How to use
This module exports just the next function:
```js
/**
* Executes the Auth0 rule contained in the script file with the provided
* user and context object and optionally adding the configuration to the
* global scope of the sandbox where the rule is actually executed.
*
* @param {string} ruleScriptPath - The path to the script which contains the
* Auth0 rule. The path can be absolute or relative. Relative paths are
* resolved from the Node process current working directory
* @see process.pwd()
* @param {Object} user - The user data to pass to the rule.
* @see {@link https://auth0.com/docs/user-profile/user-profile-structure}
* and the specified JSON schema in json-schemas/rule-user-profile.json
* @param {Object} context - The context data to pass to the rule.
* @see {@link https://auth0.com/docs/rules/context}
* and the specified JSON schema in json-schemas/rule-ctx.json
* @param {Object} [configuration] - Key and values settings which are specified
* through the Rules UI. The value must be strings.
* @returns {Promise} - Which rejects when there is any error out of the rule,
* for example, if you provided an invalid user or context or configuration
* object
* The promise resolve with an object with the data passed to the callback
* that the rule must call.
* The resolved object has an `error` property when the callback is called
* with an error. This object is the result of stringifying to JSON the
* original Error instance and parsed back to a JS Object. Otherwise the
* resolved object has an `user` an `
* - {Object} [error]: The property exists when the callback is called with
* an error. This object is the result of stringifying to JSON the
* original Error instance and parsed back to a JS Object.
* - {Object} [user]: The property exists when the callback is called
* without an error. It contains the value of the user object
* passed to the callback.
* - {Object} [context]: The property exists when the callback is called
* without an error. It contains the value of the context object
* passed to the callback.
*/
function exec (ruleScriptPath, user, context, configuration = {})
```Example
```js
const ruleRt = require('auth0-rules-runtime')
const user = { /* Valid Auth0 user profile object */ }
const context = { /* Valid Auth0 context object */ }run('rules/my-rule.js', user, context)
.then((result) => {
if (result.error) {
console.log(`An error has been returned to the callback. ${result.error.message}`)
return
}const userJSON = JSON.stringify(result.user)
const ctxJSON = JSON.stringify(result.context)
console.log(`Rule executed successfull. User: ${userJSON} | Ctx: ${ctxJSON}`)
})
.catch((e) => {
if (e instanceof SchemaValiationError) {
console.log(`There is an error in an entity object: ${e.message}`)
console.log(e.validationErrors)
return
}console.log(`Oh no there is an Error: ${e.message}`)
})```
**NOTE** if your rules use external dependencies (`require(...)`), they have to be installed by you in your local.
On the other hand, Auht0 rules can require a specific module version with the syntax `require('[email protected]')`, where `module` is the name of the NPM module to require and the `x.x.x`, the version to install. Because, such syntax is specific of the Auth0 rules, this module rewrite those `require` calls in the rules to normal ones, before running them, hence it's you responsibility to install the correct version, of each module that your rules use.
## Auth0 references
* [Rules](https://auth0.com/docs/rules)
* [Context Argument Properties in Rules](https://auth0.com/docs/rules/context)
* [Structure of the User Profile](https://auth0.com/docs/user-profile/user-profile-structure)## Acknowledgements
We would like to give thanks to the creators and their contributors to the following projects
* [tawawa/auth0-rules-testharness](https://github.com/tawawa/auth0-rules-testharness) because it helped us to find the [repository which has the modules required to run Auth0 rules](https://github.com/auth0/auth0-authz-rules-api)
* [maxbeatty/auth0-rule-sandbox](https://github.com/maxbeatty/auth0-rule-sandbox) because brought to us the idea of running the rules in a sandbox using the [Node vm standard module](https://nodejs.org/api/vm.html)## License
The MIT License (MIT) Copyright (c) 2017 cycloid.io Read the LICENSE file for more information.