Add REDIS_URL to environment variables, add ioredis ^& date-fns packages

This commit is contained in:
Xevion
2023-02-24 23:32:05 -06:00
parent b717f74e49
commit 0b8c6cbe1b
4 changed files with 110 additions and 32 deletions

23
src/env/schema.mjs vendored
View File

@@ -1,19 +1,20 @@
// @ts-check
import { z } from "zod";
import { z } from 'zod';
/**
* Specify your server-side environment variables schema here.
* This way you can ensure the app isn't built with invalid env vars.
*/
export const serverSchema = z.object({
API_KEY: z.string(),
CRONITOR_ACCOUNT_ID: z.string(),
CRONITOR_JOB_ID: z.string(),
LIFE360_USERNAME: z.string(),
LIFE360_PASSWORD: z.string(),
LIFE360_MEMBER_ID: z.string(),
MAX_DISTANCE: z.coerce.number().positive(),
CENTER_LATITUDE: z.coerce.number().min(-90).max(90),
CENTER_LONGITUDE: z.coerce.number().min(-180).max(180),
EDGE_CACHE_TIME_SECONDS: z.coerce.number().int().nonnegative().default(60),
API_KEY: z.string(),
CRONITOR_ACCOUNT_ID: z.string(),
CRONITOR_JOB_ID: z.string(),
LIFE360_USERNAME: z.string(),
LIFE360_PASSWORD: z.string(),
LIFE360_MEMBER_ID: z.string(),
MAX_DISTANCE: z.coerce.number().positive(),
CENTER_LATITUDE: z.coerce.number().min(-90).max(90),
CENTER_LONGITUDE: z.coerce.number().min(-180).max(180),
EDGE_CACHE_TIME_SECONDS: z.coerce.number().int().nonnegative().default(60),
REDIS_URL: z.string().url()
});

43
src/env/server.mjs vendored
View File

@@ -3,39 +3,40 @@
* This file is included in `/next.config.mjs` which ensures the app isn't built with invalid env vars.
* It has to be a `.mjs`-file to be imported there.
*/
import { serverSchema } from "./schema.mjs";
import { formatErrors } from "./util.mjs";
import { serverSchema } from './schema.mjs';
import { formatErrors } from './util.mjs';
const _serverEnv = serverSchema.safeParse({
API_KEY: process.env.API_KEY,
CRONITOR_ACCOUNT_ID: process.env.CRONITOR_ACCOUNT_ID,
CRONITOR_JOB_ID: process.env.CRONITOR_JOB_ID,
LIFE360_USERNAME: process.env.LIFE360_USERNAME,
LIFE360_PASSWORD: process.env.LIFE360_PASSWORD,
LIFE360_MEMBER_ID: process.env.LIFE360_MEMBER_ID,
MAX_DISTANCE: process.env.MAX_DISTANCE,
CENTER_LATITUDE: process.env.CENTER_LATITUDE,
CENTER_LONGITUDE: process.env.CENTER_LONGITUDE,
EDGE_CACHE_TIME_SECONDS: process.env.EDGE_CACHE_TIME_SECONDS,
API_KEY: process.env.API_KEY,
CRONITOR_ACCOUNT_ID: process.env.CRONITOR_ACCOUNT_ID,
CRONITOR_JOB_ID: process.env.CRONITOR_JOB_ID,
LIFE360_USERNAME: process.env.LIFE360_USERNAME,
LIFE360_PASSWORD: process.env.LIFE360_PASSWORD,
LIFE360_MEMBER_ID: process.env.LIFE360_MEMBER_ID,
MAX_DISTANCE: process.env.MAX_DISTANCE,
CENTER_LATITUDE: process.env.CENTER_LATITUDE,
CENTER_LONGITUDE: process.env.CENTER_LONGITUDE,
EDGE_CACHE_TIME_SECONDS: process.env.EDGE_CACHE_TIME_SECONDS,
REDIS_URL: process.env.REDIS_URL
});
if (_serverEnv.success === false) {
console.error(
"❌ Invalid environment variables:\n",
...formatErrors(_serverEnv.error.format())
);
throw new Error("Invalid environment variables");
console.error(
'❌ Invalid environment variables:\n',
...formatErrors(_serverEnv.error.format())
);
throw new Error('Invalid environment variables');
}
/**
* Validate that server-side environment variables are not exposed to the client.
*/
for (let key of Object.keys(_serverEnv.data)) {
if (key.startsWith("NEXT_PUBLIC_")) {
console.warn("❌ You are exposing a server-side env-variable:", key);
if (key.startsWith('NEXT_PUBLIC_')) {
console.warn('❌ You are exposing a server-side env-variable:', key);
throw new Error("You are exposing a server-side env-variable");
}
throw new Error('You are exposing a server-side env-variable');
}
}
export const env = { ..._serverEnv.data };