forked from Deen-Bridge/dnb-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidateEnv.js
More file actions
125 lines (113 loc) · 3.44 KB
/
Copy pathvalidateEnv.js
File metadata and controls
125 lines (113 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import logger from "./logger.js";
/**
* Validate required environment variables
*/
const requiredEnvVars = ["MONGO_URI", "JWT_SECRET", "NODE_ENV", "PORT"];
const optionalEnvVars = [
"CLOUDINARY_CLOUD_NAME",
"CLOUDINARY_API_KEY",
"CLOUDINARY_API_SECRET",
"BLOCKED_IPS",
"JITSI_MEET_DOMAIN",
"JITSI_APP_ID",
"JITSI_PRIVATE_KEY",
"JITSI_PUBLIC_KEY_ID",
"JITSI_KID",
"JITSI_TENANT",
"STELLAR_NETWORK",
"SEP10_SIGNING_SECRET",
"SEP10_HOME_DOMAIN",
"SEP10_WEB_AUTH_DOMAIN",
"SEP10_CHALLENGE_TIMEOUT",
"SEP10_WEB_AUTH_ENDPOINT",
"DONATION_WALLET_PUBLIC_KEY",
"PLATFORM_FEE_PERCENT",
"PLATFORM_WALLET_PUBLIC_KEY",
"PLATFORM_COLLECT_ENABLED",
"PAYOUT_ADMIN_USER_IDS",
"ACCESS_TOKEN_TTL",
"REFRESH_TOKEN_TTL",
// Redis configuration (optional - app works without Redis)
"REDIS_URL",
"REDIS_HOST",
"REDIS_PORT",
"REDIS_USERNAME",
"REDIS_PASSWORD",
"HORIZON_URLS",
"HORIZON_TIMEOUT_MS",
"HORIZON_MAX_RETRIES",
"HORIZON_CB_THRESHOLD",
"HORIZON_CB_COOLDOWN_MS",
"QUEUE_DRIVER",
"JOBS_ENABLED",
"JOBS_DASHBOARD_TOKEN",
"STELLAR_PLATFORM_PUBLIC_KEY",
"ORG_NAME",
"ORG_URL",
"ORG_DESCRIPTION",
"ORG_LOGO",
"ORG_TWITTER",
"ORG_GITHUB",
"SIGNING_KEY",
"INGESTION_WORKER_ENABLED",
"INGESTION_POLL_INTERVAL_MS",
];
export const validateEnv = () => {
// Default values for TTLs if not provided
process.env.ACCESS_TOKEN_TTL = process.env.ACCESS_TOKEN_TTL || "15m";
process.env.REFRESH_TOKEN_TTL = process.env.REFRESH_TOKEN_TTL || "30d";
// Default values for Horizon resilient client if not provided
const network = process.env.STELLAR_NETWORK || "testnet";
if (!process.env.HORIZON_URLS) {
process.env.HORIZON_URLS =
network === "mainnet"
? "https://horizon.stellar.org"
: "https://horizon-testnet.stellar.org";
}
process.env.HORIZON_TIMEOUT_MS = process.env.HORIZON_TIMEOUT_MS || "10000";
process.env.HORIZON_MAX_RETRIES = process.env.HORIZON_MAX_RETRIES || "3";
process.env.HORIZON_CB_THRESHOLD = process.env.HORIZON_CB_THRESHOLD || "5";
process.env.HORIZON_CB_COOLDOWN_MS = process.env.HORIZON_CB_COOLDOWN_MS || "30000";
const missing = [];
requiredEnvVars.forEach((envVar) => {
if (!process.env[envVar]) {
missing.push(envVar);
}
});
if (missing.length > 0) {
logger.error(
`❌ Missing required environment variables: ${missing.join(", ")}`
);
logger.error(
"Please check your .env file and ensure all required variables are set."
);
process.exit(1);
}
// Check JWT_SECRET strength
if (process.env.JWT_SECRET && process.env.JWT_SECRET.length < 32) {
logger.warn(
"⚠️ JWT_SECRET is too short! Use at least 32 characters for production."
);
}
// Check NODE_ENV
if (!["development", "production", "test"].includes(process.env.NODE_ENV)) {
logger.warn(
`⚠️ NODE_ENV is set to '${process.env.NODE_ENV}'. Expected: development, production, or test`
);
}
// Log optional missing variables
const missingOptional = optionalEnvVars.filter(
(envVar) => !process.env[envVar]
);
if (missingOptional.length > 0 && process.env.NODE_ENV === "production") {
logger.warn(
`⚠️ Optional environment variables not set: ${missingOptional.join(
", "
)}`
);
}
logger.info("✅ Environment variables validated successfully");
logger.info(`Environment: ${process.env.NODE_ENV}`);
logger.info(`Port: ${process.env.PORT}`);
};
export default validateEnv;