diff --git a/src/env.ts b/src/env.ts index abe7488..5804ec0 100644 --- a/src/env.ts +++ b/src/env.ts @@ -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({ diff --git a/src/server/contact.ts b/src/server/contact.ts index 846b182..ba2b0cc 100644 --- a/src/server/contact.ts +++ b/src/server/contact.ts @@ -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: { diff --git a/src/server/lichess.ts b/src/server/lichess.ts index 9a2fe83..dfed3f4 100644 --- a/src/server/lichess.ts +++ b/src/server/lichess.ts @@ -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 () => { diff --git a/vite.config.ts b/vite.config.ts index b22511f..989cc24 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -18,6 +18,7 @@ const config = defineConfig({ prerender: { enabled: true, crawlLinks: true, + failOnError: true, }, pages: [ {