From ea17b867be62d00da189e2a53931057b0fd11ad0 Mon Sep 17 00:00:00 2001 From: swh00tw Date: Wed, 28 Feb 2024 15:41:38 -0500 Subject: [PATCH] feat: use zod to parse client env vars --- apps/recnet/src/clientConfig.ts | 6 ------ apps/recnet/src/clientEnv.ts | 32 ++++++++++++++++++++++++++++++ apps/recnet/src/firebase/client.ts | 4 ++-- 3 files changed, 34 insertions(+), 8 deletions(-) delete mode 100644 apps/recnet/src/clientConfig.ts create mode 100644 apps/recnet/src/clientEnv.ts diff --git a/apps/recnet/src/clientConfig.ts b/apps/recnet/src/clientConfig.ts deleted file mode 100644 index 1c82b0f9..00000000 --- a/apps/recnet/src/clientConfig.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const clientConfig = { - apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, - authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, - projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, - appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID, -}; diff --git a/apps/recnet/src/clientEnv.ts b/apps/recnet/src/clientEnv.ts new file mode 100644 index 00000000..41cbb362 --- /dev/null +++ b/apps/recnet/src/clientEnv.ts @@ -0,0 +1,32 @@ +import { z } from "zod"; + +export const clientEnvSchema = z.object({ + NEXT_PUBLIC_FIREBASE_API_KEY: z.string(), + NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: z.string(), + NEXT_PUBLIC_FIREBASE_PROJECT_ID: z.string(), + NEXT_PUBLIC_FIREBASE_APP_ID: z.string(), + NEXT_PUBLIC_GA_TRACKING_ID: z.string(), +}); + +const clientEnvRes = clientEnvSchema.safeParse({ + NEXT_PUBLIC_FIREBASE_API_KEY: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, + NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: + process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, + NEXT_PUBLIC_FIREBASE_PROJECT_ID: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, + NEXT_PUBLIC_FIREBASE_APP_ID: process.env.NEXT_PUBLIC_FIREBASE_APP_ID, + NEXT_PUBLIC_GA_TRACKING_ID: process.env.NEXT_PUBLIC_GA_TRACKING_ID, +}); + +if (!clientEnvRes.success) { + // console.error(clientEnvRes.error.issues); + throw new Error("There is an error with the CLIENT environment variables"); +} + +export const clientEnv = clientEnvRes.data; + +export const firebaseClientEnv = { + apiKey: clientEnvRes.data.NEXT_PUBLIC_FIREBASE_API_KEY, + authDomain: clientEnvRes.data.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, + projectId: clientEnvRes.data.NEXT_PUBLIC_FIREBASE_PROJECT_ID, + appId: clientEnvRes.data.NEXT_PUBLIC_FIREBASE_APP_ID, +}; diff --git a/apps/recnet/src/firebase/client.ts b/apps/recnet/src/firebase/client.ts index 4c7c397b..a794b183 100644 --- a/apps/recnet/src/firebase/client.ts +++ b/apps/recnet/src/firebase/client.ts @@ -1,13 +1,13 @@ import { initializeApp, getApp, getApps } from "firebase/app"; import { getAuth } from "firebase/auth"; -import { clientConfig } from "@/clientConfig"; +import { firebaseClientEnv } from "@/clientEnv"; export const getFirebaseApp = () => { if (getApps().length) { return getApp(); } - const app = initializeApp(clientConfig); + const app = initializeApp(firebaseClientEnv); return app; };