1
0

index.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import crypto from 'crypto'
  2. import dotenv from 'dotenv'
  3. import main from './main'
  4. import path from 'path'
  5. dotenv.config()
  6. /**
  7. * Some configuration may be dynamically generated at startup.
  8. * This private object allows it to be preserved during the application's runtime.
  9. */
  10. const dynamicConfig: Record<string, unknown> = {}
  11. /** String truthy values. */
  12. const TRUE = ['1', 't', 'y', 'on', 'yes', 'true']
  13. // Run the app
  14. main({
  15. api: {
  16. prefix: process.env.API_PREFIX || '/api',
  17. },
  18. auth: {
  19. jwt: {
  20. expiresIn: parseInt(process.env.AUTH_JWT_EXPIRES_IN || '86400'),
  21. get secret() {
  22. if (process.env.AUTH_JWT_SECRET) return process.env.AUTH_JWT_SECRET
  23. if (!dynamicConfig.authJwtSecret) {
  24. const secret = crypto.randomBytes(64).toString('hex')
  25. console.warn('AUTH_JWT_SECRET not set. Generated a JWT secret for this run only:', secret)
  26. dynamicConfig.authJwtSecret = secret
  27. }
  28. return dynamicConfig.authJwtSecret as string
  29. },
  30. },
  31. },
  32. cors: undefined,
  33. fs: {
  34. root: path.dirname(__dirname),
  35. },
  36. http: {
  37. host: process.env.HTTP_HOST || '',
  38. port: parseInt(process.env.HTTP_PORT || '5001'),
  39. },
  40. log: {
  41. level: process.env.LOG_LEVEL || 'info',
  42. },
  43. mongo: {
  44. db: process.env.MONGO_DB || 'herda',
  45. uri: process.env.MONGO_URI || 'mongodb://root:root@localhost:27017',
  46. useTransactions: TRUE.includes(process.env.MONGO_USE_TRANSACTIONS || 'false'),
  47. },
  48. shutdownTimeout: parseInt(process.env.SHUTDOWN_TIMEOUT || '60000'),
  49. }).catch(err => {
  50. if (err) console.error(err)
  51. process.exit(1)
  52. })