- extraction-service: Fastify scaffold (port 4005) with extract/tasks modules - src/lib/: config, errors, cosmos, product-config, python-bridge - src/modules/extract/: types (Zod schemas), routes (POST /extract, batch, models) - src/modules/tasks/: types, repository (Cosmos CRUD), routes (CRUD endpoints) - Python sidecar: FastAPI app, LangExtract wrapper, models, task registry - @bytelyst/extraction package: types, client factory, index exports - Both pnpm build pass clean
19 lines
787 B
TypeScript
19 lines
787 B
TypeScript
import { z } from 'zod';
|
|
|
|
const envSchema = z.object({
|
|
PORT: z.coerce.number().default(4005),
|
|
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('extraction-service'),
|
|
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'),
|
|
JWT_SECRET: z.string().min(1, 'JWT_SECRET is required'),
|
|
DEFAULT_PRODUCT_ID: z.string().default('lysnrai'),
|
|
PYTHON_SIDECAR_URL: z.string().default('http://localhost:4006'),
|
|
DEFAULT_MODEL_ID: z.string().default('gemini-2.5-flash'),
|
|
});
|
|
|
|
export const config = envSchema.parse(process.env);
|