UNPKG

@buildappolis/env-manager

Version:

Enterprise-grade environment variable management system with encryption, snapshots, and validation

93 lines (79 loc) 3.12 kB
import type { APIRoute } from 'astro'; import { getDatabase } from '../../../lib/session.js'; import path from 'path'; export const POST: APIRoute = async ({ request }) => { try { const database = getDatabase(); if (!database.isAuthenticated()) { return new Response(JSON.stringify({ error: 'Not authenticated' }), { status: 401, headers: { 'Content-Type': 'application/json' } }); } const { variableName } = await request.json(); if (!variableName) { return new Response(JSON.stringify({ error: 'Variable name required' }), { status: 400, headers: { 'Content-Type': 'application/json' } }); } // Load project config from root directory const projectRoot = process.env.PROJECT_ROOT || path.resolve(process.cwd(), '..'); const configPath = path.join(projectRoot, 'env.config.ts'); try { // Import the actual config file const configModule = await import(/* @vite-ignore */ configPath); const projectConfig = configModule.default; // Find the variable configuration let variableConfig: any = null; let groupName: string | null = null; for (const [groupKey, group] of Object.entries(projectConfig.requirements)) { const groupData = group as any; const variable = groupData.variables.find((v: any) => v.name === variableName); if (variable) { variableConfig = variable; groupName = groupKey; break; } } if (!variableConfig) { return new Response(JSON.stringify({ error: 'Variable not found in project configuration' }), { status: 404, headers: { 'Content-Type': 'application/json' } }); } // Return the variable configuration for the frontend const config = { name: variableConfig.name, description: variableConfig.description, category: groupName, sensitive: variableConfig.sensitive || false, minLength: variableConfig.minLength, defaultValue: variableConfig.default, generate: variableConfig.generate, validation: variableConfig.validation ? variableConfig.validation.source : null }; return new Response(JSON.stringify(config), { status: 200, headers: { 'Content-Type': 'application/json' } }); } catch (configError) { console.error('Config loading error:', configError); return new Response(JSON.stringify({ error: 'Failed to load project configuration', message: `Error loading env.config.ts: ${configError instanceof Error ? configError.message : String(configError)}` }), { status: 500, headers: { 'Content-Type': 'application/json' } }); } } catch (error) { console.error('Get variable config error:', error); return new Response(JSON.stringify({ error: 'Failed to get variable configuration' }), { status: 500, headers: { 'Content-Type': 'application/json' } }); } };