guard env vars

This commit is contained in:
2026-09-01 23:28:21 +02:00
parent 2856aaf0d8
commit 51bfab5a64
4 changed files with 22 additions and 6 deletions
+11 -4
View File
@@ -5,15 +5,22 @@ const clientSchema = z.object({
VITE_MATOMO_URL: z.url("Invalid URL format"),
VITE_MATOMO_SITE_ID: z.string("Invalid Site ID"),
VITE_MAINTENANCE_MODE: z
.enum(["true", "false"], 'Invalid Maintenance Mode (must be "true" or "false")')
.enum(
["true", "false"],
'Invalid Maintenance Mode (must be "true" or "false")',
)
.transform((v) => v === "true"),
VITE_MAINTENANCE_MODE_MESSAGE: z.string().optional(),
});
const serverSchema = z.object({
DISCORD_CONTACT_WEBHOOK: z.string("Invalid Discord Contact Webhook URL"),
DISCORD_ERROR_LOG_WEBHOOK: z.string("Invalid Discord Error Log Webhook URL"),
LICHESS_CLIENT_ID: z.string("Invalid Lichess Client ID"),
DISCORD_CONTACT_WEBHOOK: z
.string("Invalid Discord Contact Webhook URL")
.optional(),
DISCORD_ERROR_LOG_WEBHOOK: z
.string("Invalid Discord Error Log Webhook URL")
.optional(),
LICHESS_CLIENT_ID: z.string("Invalid Lichess Client ID").optional(),
});
const fullSchema = z.object({
+4
View File
@@ -7,6 +7,10 @@ export const sendToDiscord = createServerFn({ method: "POST" })
data,
)
.handler(async ({ data }) => {
if (!env.DISCORD_CONTACT_WEBHOOK) {
return { ok: false, error: "Contact form is not configured" };
}
const response = await fetch(env.DISCORD_CONTACT_WEBHOOK, {
method: "POST",
headers: {
+6 -2
View File
@@ -18,10 +18,14 @@ import {
const createVerifier = () => base64UrlEncode(randomBytes(32));
const createChallenge = (verifier: string) => base64UrlEncode(sha256(verifier));
const getRedirectUri = () =>
process.env.NODE_ENV === "production"
const getRedirectUri = () => {
if (process.env.NODE_ENV === "production" && !env.LICHESS_CLIENT_ID) {
throw new Error("LICHESS_CLIENT_ID is not configured");
}
return process.env.NODE_ENV === "production"
? `https://${env.LICHESS_CLIENT_ID}/callback`
: "http://localhost:3000/callback";
};
export const getSession = createServerFn({ method: "GET" }).handler(
async () => {