UNPKG

@apolitical/server

Version:

Node.js module to encapsulate Apolitical's express server setup

123 lines (119 loc) 5.14 kB
'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'); const secretManager = require('@google-cloud/secret-manager'); // 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'); const secretsService = require('./services/secrets.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), secretManager: asValue(secretManager), // 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(), secretsService: asFunction(secretsService).singleton(), }); module.exports = container;