@apolitical/server
Version:
Node.js module to encapsulate Apolitical's express server setup
119 lines (115 loc) • 4.92 kB
JavaScript
'use strict';
// External Modules
const { createContainer, asValue, asFunction } = require('awilix');
const bodyParser = require('body-parser');
const compression = require('compression');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const express = require('express');
const expressJwt = require('express-jwt');
const health = require('@cloudnative/health-connect');
const httpStatusCodes = require('http-status-codes');
const httpTerminator = require('http-terminator');
const jwksRsa = require('jwks-rsa');
const jsrsasign = require('jsrsasign');
const jwtDecode = require('jwt-decode');
const lru = require('lru-cache');
const morgan = require('morgan');
const passport = require('passport');
const passportJwt = require('passport-jwt');
const prerender = require('prerender-node');
const qs = require('qs');
const swaggerUi = require('swagger-ui-express');
const xss = require('xss');
// Internal Modules
const apoliticalLogger = require('@apolitical/logger');
// Configuration
const config = require('./config');
// Logger
const logger = apoliticalLogger.createLogger(config.LOGGER_OPTIONS);
// Errors
const serverError = require('./errors/server.error');
// Helpers
const jwtDecodeHelper = require('./helpers/jwt/decode.helper');
const jwtEncodeHelper = require('./helpers/jwt/encode.helper');
const jwtPassportHelper = require('./helpers/jwt/passport.helper');
const loggerHelper = require('./helpers/logger.helper');
const requestHelper = require('./helpers/request.helper');
// Loaders
const documentationLoader = require('./loaders/documentation.loader');
const expressLoader = require('./loaders/express.loader');
const loggerLoader = require('./loaders/logger.loader');
const middlewaresLoader = require('./loaders/middlewares.loader');
const otelLoader = require('./loaders/otel.loader');
const probesLoader = require('./loaders/probes.loader');
const fallbackLoader = require('./loaders/fallback.loader');
// Middleware
const authenticationMiddleware = require('./middlewares/authentication.middleware');
const authorisationMiddleware = require('./middlewares/authorisation.middleware');
const jwtApoliticalMiddleware = require('./middlewares/jwt/apolitical.middleware');
const jwtAuth0Middleware = require('./middlewares/jwt/auth0.middleware');
const errorMiddleware = require('./middlewares/error.middleware');
// Services
const expressService = require('./services/express.service');
const healthService = require('./services/health.service');
const jwtService = require('./services/jwt.service');
const serverService = require('./services/server.service');
// DI container
const container = createContainer();
container.register({
// External Modules
bodyParser: asValue(bodyParser),
compression: asValue(compression),
cookieParser: asValue(cookieParser),
cors: asValue(cors),
express: asValue(express),
expressJwt: asValue(expressJwt),
health: asValue(health),
httpStatusCodes: asValue(httpStatusCodes),
httpTerminator: asValue(httpTerminator),
jwksRsa: asValue(jwksRsa),
jsrsasign: asValue(jsrsasign),
jwtDecode: asValue(jwtDecode),
lru: asValue(lru),
morgan: asValue(morgan),
passport: asValue(passport),
passportJwt: asValue(passportJwt),
prerender: asValue(prerender),
qs: asValue(qs),
swaggerUi: asValue(swaggerUi),
xss: asValue(xss),
// Internal Modules
apoliticalLogger: asValue(apoliticalLogger),
// Configuration
config: asValue(config),
// Logger
logger: asValue(logger),
// Errors
serverError: asFunction(serverError).singleton(),
// Helpers
jwtDecodeHelper: asFunction(jwtDecodeHelper).singleton(),
jwtEncodeHelper: asFunction(jwtEncodeHelper).singleton(),
jwtPassportHelper: asFunction(jwtPassportHelper).singleton(),
loggerHelper: asFunction(loggerHelper).singleton(),
requestHelper: asFunction(requestHelper).singleton(),
// Loaders
documentationLoader: asFunction(documentationLoader).singleton(),
expressLoader: asFunction(expressLoader).singleton(),
loggerLoader: asFunction(loggerLoader).singleton(),
middlewaresLoader: asFunction(middlewaresLoader).singleton(),
otelLoader: asFunction(otelLoader).singleton(),
probesLoader: asFunction(probesLoader).singleton(),
fallbackLoader: asFunction(fallbackLoader).singleton(),
// Middlewares
authenticationMiddleware: asFunction(authenticationMiddleware).singleton(),
authorisationMiddleware: asFunction(authorisationMiddleware).singleton(),
jwtApoliticalMiddleware: asFunction(jwtApoliticalMiddleware).singleton(),
jwtAuth0Middleware: asFunction(jwtAuth0Middleware).singleton(),
errorMiddleware: asFunction(errorMiddleware).singleton(),
// Services
expressService: asFunction(expressService).singleton(),
healthService: asFunction(healthService).singleton(),
jwtService: asFunction(jwtService).singleton(),
serverService: asFunction(serverService).singleton(),
});
module.exports = container;