29 lines
1018 B
TypeScript
29 lines
1018 B
TypeScript
|
|
import { z } from 'zod';
|
||
|
|
|
||
|
|
const Env = z.object({
|
||
|
|
NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),
|
||
|
|
DATABASE_URL: z.string(),
|
||
|
|
REDIS_URL: z.string().default('redis://localhost:6379'),
|
||
|
|
PORT: z.coerce.number().default(4000),
|
||
|
|
NEXT_PUBLIC_APP_URL: z.string().default('http://localhost:3000'),
|
||
|
|
OAUTH_KEY_DIR: z.string().default('./keys'),
|
||
|
|
ANTHROPIC_API_KEY: z.string().optional(),
|
||
|
|
SECRETS_ENCRYPTION_KEY: z
|
||
|
|
.string()
|
||
|
|
.min(64, '32 bytes hex required')
|
||
|
|
.default('0000000000000000000000000000000000000000000000000000000000000000'),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const config = Env.parse({
|
||
|
|
NODE_ENV: process.env.NODE_ENV,
|
||
|
|
DATABASE_URL: process.env.DATABASE_URL,
|
||
|
|
REDIS_URL: process.env.REDIS_URL,
|
||
|
|
PORT: process.env.PORT,
|
||
|
|
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
|
||
|
|
OAUTH_KEY_DIR: process.env.OAUTH_KEY_DIR,
|
||
|
|
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
|
||
|
|
SECRETS_ENCRYPTION_KEY: process.env.SECRETS_ENCRYPTION_KEY,
|
||
|
|
});
|
||
|
|
|
||
|
|
export type Config = z.infer<typeof Env>;
|