- Copied as-is from learning_voice_ai_agent/services/platform-service - 55 tests passing (vitest) - Fastify 5 + Cosmos DB + jose + bcryptjs + Zod - Modules: auth, audit, flags, notifications, blob, ratelimit - Port 4003
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { z } from "zod";
|
|
|
|
const envSchema = z.object({
|
|
// Server
|
|
PORT: z.coerce.number().default(4003),
|
|
HOST: z.string().default("0.0.0.0"),
|
|
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
|
|
CORS_ORIGIN: z.string().optional(),
|
|
SERVICE_NAME: z.string().default("platform-service"),
|
|
|
|
// Database
|
|
COSMOS_ENDPOINT: z.string().min(1, "COSMOS_ENDPOINT is required"),
|
|
COSMOS_KEY: z.string().min(1, "COSMOS_KEY is required"),
|
|
COSMOS_DATABASE: z.string().default("lysnrai"),
|
|
|
|
// Auth
|
|
JWT_SECRET: z.string().min(1, "JWT_SECRET is required"),
|
|
|
|
// Blob Storage
|
|
AZURE_BLOB_CONNECTION_STRING: z.string().optional(),
|
|
AZURE_BLOB_ACCOUNT_NAME: z.string().optional(),
|
|
AZURE_BLOB_ACCOUNT_KEY: z.string().optional(),
|
|
|
|
// Features
|
|
RATE_LIMIT_CONFIG_JSON: z.string().optional(),
|
|
}).refine(data =>
|
|
data.AZURE_BLOB_CONNECTION_STRING || (data.AZURE_BLOB_ACCOUNT_NAME && data.AZURE_BLOB_ACCOUNT_KEY),
|
|
{ message: "Must provide AZURE_BLOB_CONNECTION_STRING or AZURE_BLOB_ACCOUNT_NAME/KEY" }
|
|
);
|
|
|
|
export const config = envSchema.parse(process.env);
|