env.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const { cleanEnv, num, str, bool } = require("envalid");
  2. const supportedDBClients = [
  3. "pg",
  4. "pg-native",
  5. "sqlite3",
  6. "better-sqlite3",
  7. "mysql",
  8. "mysql2"
  9. ];
  10. // make sure custom alphabet is not empty
  11. if (process.env.LINK_CUSTOM_ALPHABET === "") {
  12. delete process.env.LINK_CUSTOM_ALPHABET;
  13. }
  14. // make sure jwt secret is not empty
  15. if (process.env.JWT_SECRET === "") {
  16. delete process.env.JWT_SECRET;
  17. }
  18. // if NODE_ENV is not already set, set it based on --production argument
  19. process.env.NODE_ENV ??= process.argv.includes("--production") ? "production" : "development";
  20. const env = cleanEnv(process.env, {
  21. PORT: num({ default: 3000 }),
  22. SITE_NAME: str({ example: "Kutt", default: "Kutt" }),
  23. DEFAULT_DOMAIN: str({ example: "kutt.it", default: "localhost:3000" }),
  24. LINK_LENGTH: num({ default: 6 }),
  25. LINK_CUSTOM_ALPHABET: str({ default: "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789" }),
  26. TRUST_PROXY: bool({ default: true }),
  27. DB_CLIENT: str({ choices: supportedDBClients, default: "better-sqlite3" }),
  28. DB_FILENAME: str({ default: "db/data" }),
  29. DB_HOST: str({ default: "localhost" }),
  30. DB_PORT: num({ default: 5432 }),
  31. DB_NAME: str({ default: "kutt" }),
  32. DB_USER: str({ default: "postgres" }),
  33. DB_PASSWORD: str({ default: "" }),
  34. DB_SSL: bool({ default: false }),
  35. DB_POOL_MIN: num({ default: 0 }),
  36. DB_POOL_MAX: num({ default: 10 }),
  37. REDIS_ENABLED: bool({ default: false }),
  38. REDIS_HOST: str({ default: "127.0.0.1" }),
  39. REDIS_PORT: num({ default: 6379 }),
  40. REDIS_PASSWORD: str({ default: "" }),
  41. REDIS_DB: num({ default: 0 }),
  42. DISALLOW_ANONYMOUS_LINKS: bool({ default: true }),
  43. DISALLOW_REGISTRATION: bool({ default: true }),
  44. SERVER_IP_ADDRESS: str({ default: "" }),
  45. SERVER_CNAME_ADDRESS: str({ default: "" }),
  46. CUSTOM_DOMAIN_USE_HTTPS: bool({ default: false }),
  47. JWT_SECRET: str({ devDefault: "securekey" }),
  48. MAIL_ENABLED: bool({ default: false }),
  49. MAIL_HOST: str({ default: "" }),
  50. MAIL_PORT: num({ default: 587 }),
  51. MAIL_SECURE: bool({ default: false }),
  52. MAIL_USER: str({ default: "" }),
  53. MAIL_FROM: str({ default: "", example: "Kutt <support@kutt.it>" }),
  54. MAIL_PASSWORD: str({ default: "" }),
  55. ENABLE_RATE_LIMIT: bool({ default: false }),
  56. REPORT_EMAIL: str({ default: "" }),
  57. CONTACT_EMAIL: str({ default: "" }),
  58. NODE_APP_INSTANCE: num({ default: 0 }),
  59. });
  60. module.exports = env;