import "dotenv/config"; import ms from "ms"; export const DB_TYPE = process.env.DB_TYPE ?? "mysql"; export const DB_HOST = process.env.DB_HOST ?? ""; export const DB_PORT = Number(process.env.DB_PORT ?? 3306); export const DB_NAME = process.env.DB_NAME ?? ""; export const DB_USERNAME = process.env.DB_USERNAME ?? ""; export const DB_PASSWORD = process.env.DB_PASSWORD ?? ""; export const SERVER_PORT = Number(process.env.SERVER_PORT ?? 5000); export const JWT_SECRET = process.env.JWT_SECRET ?? "my_jwt_secret_string_ilughfnadiuhgq§$IUZGFVRweiouarbt1oub3h5q4a"; export const JWT_EXPIRATION = process.env.JWT_EXPIRATION ?? "15m"; export const REFRESH_EXPIRATION = process.env.REFRESH_EXPIRATION ?? "1d"; export const PWA_REFRESH_EXPIRATION = process.env.PWA_REFRESH_EXPIRATION ?? "5d"; export const MAIL_USERNAME = process.env.MAIL_USERNAME ?? ""; export const MAIL_PASSWORD = process.env.MAIL_PASSWORD ?? ""; export const MAIL_HOST = process.env.MAIL_HOST ?? ""; export const MAIL_PORT = Number(process.env.MAIL_PORT ?? "587"); export const MAIL_SECURE = process.env.MAIL_SECURE ?? "false"; export const CLUB_NAME = process.env.CLUB_NAME ?? "FF Admin"; export const CLUB_WEBSITE = process.env.CLUB_WEBSITE ?? ""; export const BACKUP_INTERVAL = Number(process.env.BACKUP_INTERVAL ?? "1"); export const BACKUP_COPIES = Number(process.env.BACKUP_COPIES ?? "7"); export const BACKUP_AUTO_RESTORE = process.env.BACKUP_AUTO_RESTORE ?? "true"; export const USE_SECURITY_STRICT_LIMIT = process.env.USE_SECURITY_STRICT_LIMIT ?? "true"; export const SECURITY_STRICT_LIMIT_WINDOW = process.env.SECURITY_STRICT_LIMIT_WINDOW ?? "15m"; export const SECURITY_STRICT_LIMIT_REQUEST_COUNT = Number(process.env.SECURITY_STRICT_LIMIT_REQUEST_COUNT ?? "15"); export const USE_SECURITY_LIMIT = process.env.USE_SECURITY_LIMIT ?? "true"; export const SECURITY_LIMIT_WINDOW = process.env.SECURITY_LIMIT_WINDOW ?? "1m"; export const SECURITY_LIMIT_REQUEST_COUNT = Number(process.env.SECURITY_LIMIT_REQUEST_COUNT ?? "500"); export function configCheck() { if (DB_TYPE != "mysql" && DB_TYPE != "sqlite" && DB_TYPE != "postgres") throw new Error("set valid value to DB_TYPE (mysql|sqlite|postgres)"); if ((DB_HOST == "" || typeof DB_HOST != "string") && DB_TYPE != "sqlite") throw new Error("set valid value to DB_HOST"); if (DB_NAME == "" || typeof DB_NAME != "string") throw new Error("set valid value to DB_NAME"); if ((DB_USERNAME == "" || typeof DB_USERNAME != "string") && DB_TYPE != "sqlite") throw new Error("set valid value to DB_USERNAME"); if ((DB_PASSWORD == "" || typeof DB_PASSWORD != "string") && DB_TYPE != "sqlite") throw new Error("set valid value to DB_PASSWORD"); if (typeof SERVER_PORT != "number") throw new Error("set valid numeric value to SERVER_PORT"); if (JWT_SECRET == "" || typeof JWT_SECRET != "string") throw new Error("set valid value to JWT_SECRET"); checkMS(JWT_EXPIRATION, "JWT_EXPIRATION"); checkMS(REFRESH_EXPIRATION, "REFRESH_EXPIRATION"); checkMS(PWA_REFRESH_EXPIRATION, "PWA_REFRESH_EXPIRATION"); if (MAIL_USERNAME == "" || typeof MAIL_USERNAME != "string") throw new Error("set valid value to MAIL_USERNAME"); if (MAIL_PASSWORD == "" || typeof MAIL_PASSWORD != "string") throw new Error("set valid value to MAIL_PASSWORD"); if (MAIL_HOST == "" || typeof MAIL_HOST != "string") throw new Error("set valid value to MAIL_HOST"); if (typeof MAIL_PORT != "number") throw new Error("set valid numeric value to MAIL_PORT"); if (MAIL_SECURE != "true" && MAIL_SECURE != "false") throw new Error("set 'true' or 'false' to MAIL_SECURE"); if ( CLUB_WEBSITE != "" && !/^(http(s):\/\/.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/.test(CLUB_WEBSITE) ) throw new Error("CLUB_WEBSITE is not valid url"); if (BACKUP_AUTO_RESTORE != "true" && BACKUP_AUTO_RESTORE != "false") throw new Error("set 'true' or 'false' to BACKUP_AUTO_RESTORE"); if (BACKUP_INTERVAL < 1) throw new Error("BACKUP_INTERVAL has to be at least 1"); if (BACKUP_COPIES < 1) throw new Error("BACKUP_COPIES has to be at least 1"); if (USE_SECURITY_STRICT_LIMIT != "true" && USE_SECURITY_STRICT_LIMIT != "false") throw new Error("set 'true' or 'false' to USE_SECURITY_STRICT_LIMIT"); checkMS(SECURITY_STRICT_LIMIT_WINDOW, "SECURITY_STRICT_LIMIT_WINDOW"); if (typeof SECURITY_STRICT_LIMIT_REQUEST_COUNT != "number") throw new Error("set valid numeric value to SECURITY_STRICT_LIMIT_REQUEST_COUNT"); if (USE_SECURITY_LIMIT != "true" && USE_SECURITY_LIMIT != "false") throw new Error("set 'true' or 'false' to USE_SECURITY_LIMIT"); checkMS(SECURITY_LIMIT_WINDOW, "SECURITY_LIMIT_WINDOW"); if (typeof SECURITY_LIMIT_REQUEST_COUNT != "number") throw new Error("set valid numeric value to SECURITY_LIMIT_REQUEST_COUNT"); } function checkMS(input: string, origin: string) { try { const result = ms(input); if (result === undefined) { throw new Error(`set valid ms value to ${origin} -> [0-9]*(y|d|h|m|s)`); } } catch (e) { throw new Error(`set valid ms value to ${origin} -> [0-9]*(y|d|h|m|s)`); } }