Nutritious Potato Munchies

tree-house

3.3.2 • Public • Published

Treehouse

NodeJS utilities and handy helpers extending ExpressJS functionalities

npm version Dependencies Build Status Coverage Status

Installation

Install via npm

npm install tree-house

or via yarn

yarn add tree-house

Usage

const treehouse = require('tree-house')
import * as treehouse from 'tree-house'

Security

setBasicSecurity(app, route, options)

Set some basic Express security using cors and helmet.

const app = express();
 
treehouse.setBasicSecurity(app, '*', {
  cors: {},   // cors options
  helmet: {}, // helmet options
})

setBodyParser(app, route, options)

Set a body parser using the body-parser module

const app = express();
 
treehouse.setBodyParser(app, '*', {
  json: {},   // json options
  raw: {}, // raw options
  text: {}, // text options
  urlEncoded: {}, // urlEncoded options
})

getRateLimiter(options)

Get a rate limiter instance to prevent brute force attacks. This can be used as a middleware in Express. At the moment there is support for a built in-memorystore or Redis. Both use the express-brute module.

const app = express();
 
// In memory store (development purposes)
const globalBruteforce = treehouse.getRateLimiter({
  freeRetries: 1000,
  attachResetToRequest: false,
  refreshTimeoutOnRequest: false,
  minWait: 25*60*60*1000, // 1 day 1 hour (should never reach this wait time)
  maxWait: 25*60*60*1000, // 1 day 1 hour (should never reach this wait time)
  lifetime: 24*60*60, // 1 day (seconds not milliseconds)
});
 
app.use('/login', globalBruteforce.prevent, ...);
 
// Using existing Redis client
treehouse.getRateLimiter({
  redis: {
    client: existingClient, // All Redis options or 'client' to use an existing client (see redis-express-brute)
  },
});

Responder

handleAsyncFn((req, res, next(optional)) => { ... })

Express middleware that wraps and executes a given function with try/catch to avoid unhandled promises within Express.

const app = express();
 
function getAllUsers(req, res) {
  //  res.send(users) -> return users...
  // or
  // if an unhandled error occurs this will be passed onto the Express error handler instead of raising an UnhandledPromiseRejectionError
}
 
app.use('/users', treehouse.handleAsyncFn(getAllUsers));

Server

startServer(app, options)

Start an http or https server using an express instance

const app = express();
 
treehouse.startServer(app, {
  port: 3000,
  title: 'My app',
  pre: preFn,       // function to execute before starting server (optional)
  post: postFn,     // function to execute after starting server (optional)
  https: {          // optional
    port: 3001,
    privateKey: 'assets/ssl.key',
    certificate: 'assets/ssl.cert',
  }
})

Swagger

setSwagger(app, route, filePath, options)

Serve Swagger UI via the a provided Swagger yaml file.

const app = express();
 
treehouse.setSwagger(app, '/documentation', 'documentation/swagger.yml', {
  host: 'localhost:3000',
  schemes: ['http'],
};

Validator

validateSchema(schema, options)

Express middleware to validate a Joi schema using the express-validation module. This will throw an error as an instance of ExpressValidationError if the Joi validation fails.

const schema =   {
  body: {
    name: Joi.string().required(),
  }
};
 
app.post('/my-endpoint', treehouse.validateSchema(schema), ...);

Tests

  • You can run npm run test to run all tests
  • You can run npm run test:coverage to run all tests with coverage report

Bugs

When you find issues, please report them:

Be sure to include all of the output from the npm command that didn't work as expected. The npm-debug.log file is also helpful to provide.

Authors

See the list of contributors who participated in this project.

License

This project is licensed under the ISC License - see the LICENSE.md file for details

install

npm i tree-house

Downloadsweekly downloads

10

version

3.3.2

license

ISC

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
  • avatar
  • avatar
  • avatar
  • avatar
Report a vulnerability