Sifa professional network API (Fastify, AT Protocol, Jetstream)
sifa.id/
1import { z } from 'zod';
2
3const envSchema = z.object({
4 NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
5 PORT: z.coerce.number().default(3100),
6 PUBLIC_URL: z.string().url(),
7 DATABASE_URL: z.string(),
8 VALKEY_URL: z.string(),
9 SIFA_DID: z.string().startsWith('did:'),
10 JETSTREAM_URL: z.string().url(),
11 OAUTH_JWKS_PATH: z.string(),
12 GLITCHTIP_DSN: z.string().url().optional(),
13 GEONAMES_USERNAME: z.string().default('gxjansen'),
14 ADMIN_DIDS: z.string().optional(),
15});
16
17export type Env = z.infer<typeof envSchema>;
18
19export function loadConfig(): Env {
20 const result = envSchema.safeParse(process.env);
21 if (!result.success) {
22 throw new Error(`Invalid environment variables:\n${result.error.format()}`);
23 }
24 return result.data;
25}