@buildappolis/env-manager
Version:
Enterprise-grade environment variable management system with encryption, snapshots, and validation
91 lines (79 loc) • 2.67 kB
text/typescript
import type { APIRoute } from 'astro'
import { getDatabase } from '../../lib/session.js'
import DraftManager from '../../lib/draft-manager.js'
export const GET: APIRoute = async ({ url }) => {
try {
const projectPath = url.searchParams.get('projectPath')
const database = getDatabase(projectPath || undefined)
// Check if authenticated
if (!database.isAuthenticated()) {
return new Response(JSON.stringify({ error: 'Unauthorized' }), {
status: 401,
headers: { 'Content-Type': 'application/json' }
})
}
const draftManager = new DraftManager(database)
const versions = draftManager.getVersionHistory()
return new Response(JSON.stringify({
versions,
count: versions.length
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
})
} catch (error) {
console.error('Failed to load versions:', error)
return new Response(JSON.stringify({ error: 'Failed to load versions' }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
})
}
}
export const POST: APIRoute = async ({ request }) => {
try {
const { projectPath, action, ...data } = await request.json()
const database = getDatabase(projectPath || undefined)
// Check if authenticated
if (!database.isAuthenticated()) {
return new Response(JSON.stringify({ error: 'Unauthorized' }), {
status: 401,
headers: { 'Content-Type': 'application/json' }
})
}
const draftManager = new DraftManager(database)
switch (action) {
case 'create_version':
const version = await draftManager.publishDraft()
return new Response(JSON.stringify({
success: true,
version
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
})
case 'compare':
const { fromId, toId } = data
const changes = draftManager.compareVersions(fromId, toId)
return new Response(JSON.stringify({
changes
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
})
default:
return new Response(JSON.stringify({ error: 'Invalid action' }), {
status: 400,
headers: { 'Content-Type': 'application/json' }
})
}
} catch (error) {
console.error('Version operation failed:', error)
return new Response(JSON.stringify({
error: 'Operation failed',
details: error instanceof Error ? error.message : 'Unknown error'
}), {
status: 500,
headers: { 'Content-Type': 'application/json' }
})
}
}