Files
freno-dev/src/env/client.ts
2026-05-28 10:24:23 -04:00

59 lines
1.5 KiB
TypeScript

export interface ClientEnv {
VITE_DOMAIN: string;
VITE_AWS_BUCKET_STRING: string;
VITE_DOWNLOAD_BUCKET_STRING: string;
VITE_GOOGLE_CLIENT_ID: string;
VITE_GOOGLE_CLIENT_ID_MAGIC_DELVE: string;
VITE_GITHUB_CLIENT_ID: string;
VITE_WEBSOCKET: string;
VITE_INFILL_ENDPOINT: string;
VITE_TURNSTILE_SITE_KEY: string
}
const requiredKeys: (keyof ClientEnv)[] = [
"VITE_DOMAIN",
"VITE_AWS_BUCKET_STRING",
"VITE_DOWNLOAD_BUCKET_STRING",
"VITE_GOOGLE_CLIENT_ID",
"VITE_GOOGLE_CLIENT_ID_MAGIC_DELVE",
"VITE_GITHUB_CLIENT_ID",
"VITE_WEBSOCKET",
"VITE_INFILL_ENDPOINT",
"VITE_TURNSTILE_SITE_KEY"
];
export const validateClientEnv = (
envVars: Record<string, string | undefined>
): ClientEnv => {
const missing = requiredKeys.filter(
(key) => !envVars[key] || envVars[key]!.trim() === ""
);
if (missing.length > 0) {
const message = `Client environment validation failed:\nMissing required variables: ${missing.join(", ")}`;
console.error(message);
throw new Error(message);
}
return envVars as unknown as ClientEnv;
};
const validateAndExportEnv = (): ClientEnv => {
try {
const validated = validateClientEnv(import.meta.env);
return validated;
} catch (error) {
throw error;
}
};
export const env = validateAndExportEnv();
export const isMissingEnvVar = (varName: string): boolean => {
return !import.meta.env[varName] || import.meta.env[varName]?.trim() === "";
};
export const getMissingEnvVars = (): string[] => {
return requiredKeys.filter((varName) => isMissingEnvVar(varName));
};