79 lines
2.8 KiB
TypeScript
79 lines
2.8 KiB
TypeScript
import { config } from "dotenv";
|
|
import { cleanEnv, num, str, bool, url, port } from "envalid";
|
|
|
|
config();
|
|
|
|
export const env = cleanEnv(process.env, {
|
|
ANIWATCH_API_PORT: port({
|
|
default: 4000,
|
|
desc: "Port number of the Aniwatch API.",
|
|
}),
|
|
|
|
ANIWATCH_API_WINDOW_MS: num({
|
|
// 60 mins if dev, else 30 mins
|
|
default: isDevEnv() ? 60 * 60 * 1000 : 30 * 60 * 1000,
|
|
desc: "Duration to track requests for rate limiting (in milliseconds).",
|
|
docs: "https://github.com/ghoshRitesh12/aniwatch-api/blob/main/.env.example#L9",
|
|
}),
|
|
|
|
ANIWATCH_API_MAX_REQS: num({
|
|
default: isDevEnv() ? 600 : 6,
|
|
desc: "Maximum number of requests in the `ANIWATCH_API_WINDOW_MS` time period.",
|
|
}),
|
|
|
|
ANIWATCH_API_CORS_ALLOWED_ORIGINS: str({
|
|
default: undefined,
|
|
example:
|
|
"https://your-production-domain.com,https://another-trusted-domain.com",
|
|
desc: "Allowed origins, separated by commas and no spaces in between (CSV).",
|
|
}),
|
|
|
|
ANIWATCH_API_VERCEL_DEPLOYMENT: bool({
|
|
default: false,
|
|
desc: "Required for distinguishing Vercel deployment from other ones; set it to true",
|
|
}),
|
|
|
|
ANIWATCH_API_HOSTNAME: str({
|
|
default: undefined,
|
|
example: "https://your-production-domain.com",
|
|
desc: "Set this to your api instance's hostname to enable rate limiting, don't have this value if you don't wish to rate limit.",
|
|
docs: "https://github.com/ghoshRitesh12/aniwatch-api/blob/main/.env.example#L18",
|
|
}),
|
|
|
|
ANIWATCH_API_REDIS_CONN_URL: url({
|
|
default: undefined,
|
|
example:
|
|
"rediss://default:your-secure-password@your-redis-instance-name.provider.com:6379",
|
|
desc: "This env is optional by default and can be set to utilize Redis caching functionality. It has to be a valid connection URL.",
|
|
}),
|
|
|
|
ANIWATCH_API_S_MAXAGE: num({
|
|
default: 60,
|
|
desc: "Specifies the maximum amount of time (in seconds) a resource is considered fresh when served by a CDN cache.",
|
|
}),
|
|
|
|
ANIWATCH_API_STALE_WHILE_REVALIDATE: num({
|
|
default: 30,
|
|
desc: "Specifies the amount of time (in seconds) a resource is served stale while a new one is fetched.",
|
|
}),
|
|
|
|
NODE_ENV: str({
|
|
default: "development",
|
|
choices: ["development", "production", "test", "staging"],
|
|
desc: "The environment in which the application is running.",
|
|
docs: "https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production",
|
|
}),
|
|
});
|
|
|
|
function isDevEnv(): boolean {
|
|
return (
|
|
!process.env.NODE_ENV ||
|
|
process.env.NODE_ENV === "development" ||
|
|
process.env.NODE_ENV === "test"
|
|
);
|
|
}
|
|
|
|
export function isEnvUndefined(envVar?: string): boolean {
|
|
return typeof envVar === "undefined" || envVar === "undefined";
|
|
}
|