From 4c05aafd2de0bf6c4ae5e331149f8d88348d68bc Mon Sep 17 00:00:00 2001 From: Joe Carstairs <65492573+Sycamost@users.noreply.github.com> Date: Sat, 12 Aug 2023 13:07:26 +0100 Subject: Adds client ID and environment env vars to frontend --- src/lib/env.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/lib/env.ts (limited to 'src') diff --git a/src/lib/env.ts b/src/lib/env.ts new file mode 100644 index 0000000..20f18f5 --- /dev/null +++ b/src/lib/env.ts @@ -0,0 +1,43 @@ +import dotenv from 'dotenv'; + +// Parsing the env file. +dotenv.config({ path: '../../.env' }); + +type Env = { + PAYPAL_LIVE_CLIENT_ID: string, + PAYPAL_SANDBOX_CLIENT_ID: string, + ENVIRONMENT: 'dev' | 'prod', +}; + +type DirtyEnv = { [key in keyof Env]?: string }; + +const ENV: { [key in keyof Env]: number } = { + PAYPAL_LIVE_CLIENT_ID: 1, + PAYPAL_SANDBOX_CLIENT_ID: 1, + ENVIRONMENT: 1, +}; + +const { env }: { env: DirtyEnv } = process; + +const sanitisedEnvEntries = + (Object.keys(ENV) as (keyof Env)[]) + .map<[keyof Env, string]>(key => { + const value = env[key]; + if (!value) { + throw new Error(`Environment not configured correctly. ${key} was not defined.`); + } + + if (key === 'ENVIRONMENT') { + if (!['dev', 'prod'].includes(value)) { + throw new Error(` + Environment not configured correctly. ${key} must be + either 'dev' or 'prod', but '${value}' was provided. + `); + } + } + return [key, value]; + }); + +const sanitisedEnv = Object.fromEntries(sanitisedEnvEntries) as Env; + +export default sanitisedEnv; \ No newline at end of file -- cgit v1.2.3