UNPKG

get-express-starter

Version:

Get production ready express boilerplate with a single command

63 lines (57 loc) 2.02 kB
import path from 'node:path'; import dotenv from 'dotenv'; import Joi from 'joi'; dotenv.config({ path: path.join(__dirname, '../../.env') }); const envVarsSchema = Joi.object() .keys({ NODE_ENV: Joi.string().valid('production', 'development', 'test').required(), PORT: Joi.number().default(3000), DATABASE_URL: Joi.string().required(), JWT_SECRET: Joi.string().required().description('JWT secret key'), JWT_ACCESS_EXPIRATION_MINUTES: Joi.number().default(30).description('minutes after which access tokens expire'), JWT_REFRESH_EXPIRATION_DAYS: Joi.number().default(30).description('days after which refresh tokens expire'), JWT_RESET_PASSWORD_EXPIRATION_MINUTES: Joi.number() .default(10) .description('minutes after which reset password token expires'), JWT_VERIFY_EMAIL_EXPIRATION_MINUTES: Joi.number(), SMTP_HOST: Joi.string(), SMTP_PORT: Joi.number(), SMTP_USERNAME: Joi.string(), SMTP_PASSWORD: Joi.string(), EMAIL_FROM: Joi.string(), FRONTEND_URL: Joi.string().required(), BACKEND_URL: Joi.string(), }) .unknown(); const { value: envVars, error } = envVarsSchema.prefs({ errors: { label: 'key' } }).validate(process.env); if (error) { throw new Error(`Config validation error: ${error.message}`); } export const env = { mode: envVars.NODE_ENV, port: envVars.PORT, db: { url: envVars.DATABASE_URL, }, jwt: { secret: envVars.JWT_SECRET, accessExpirationMinutes: envVars.JWT_ACCESS_EXPIRATION_MINUTES, refreshExpirationDays: envVars.JWT_REFRESH_EXPIRATION_DAYS, resetPasswordExpirationMinutes: envVars.JWT_RESET_PASSWORD_EXPIRATION_MINUTES, verifyEmailExpirationMinutes: envVars.JWT_VERIFY_EMAIL_EXPIRATION_MINUTES, }, email: { smtp: { host: envVars.SMTP_HOST, port: envVars.SMTP_PORT, auth: { user: envVars.SMTP_USERNAME, pass: envVars.SMTP_PASSWORD, }, }, from: envVars.EMAIL_FROM, }, frontend: { url: envVars.FRONTEND_URL, }, };