UNPKG

express-gateway

Version:

A microservices API gateway built on top of ExpressJS

54 lines (43 loc) 1.38 kB
const fs = require('fs'); const path = require('path'); const logger = require('../logger').policy; const ConfigurationError = require('../errors').ConfigurationError; const schemas = require('../schemas'); class Policies { constructor () { this.policies = {}; const policyNames = fs .readdirSync(path.resolve(__dirname)) .filter(dir => fs.lstatSync(path.resolve(__dirname, dir)).isDirectory()); policyNames.forEach((name) => { const policy = require(path.resolve(__dirname, name)); this.policies[name] = Object.assign(policy, { name }); this.register(policy); }); } register (policy) { const { name, schema } = policy; const action = policy.policy; const validate = schemas.register('policy', name, schema); policy.policy = (params, ...args) => { const validationResult = validate(params); if (validationResult.isValid) { return action(params, ...args); } else { logger.warn(`warning: policy ${name} params validation failed`, validationResult.error); return null; } }; this.policies[name] = policy; } resolve (policyName) { const policy = this.policies[policyName]; if (!policy) { throw new ConfigurationError(`Could not find policy ${policyName}`); } return policy; } } module.exports = new Policies();