UNPKG

can-algorithm

Version:

Cortex Algorithm Numeral - Intelligent development automation tool

118 lines (94 loc) 3.8 kB
const express = require('express'); const bodyParser = require('body-parser'); const fs = require('fs').promises; const path = require('path'); const crypto = require('crypto'); const app = express(); app.use(bodyParser.json({ limit: '50mb' })); const PORT = process.env.ESP_PORT || 3002; const analyzeEnvironment = async (projectPath) => { const analysis = { frameworks: [], languages: {}, dependencies: {}, structure: {}, security: { vulnerabilities: [], permissions: {} } }; try { const packageJsonPath = path.join(projectPath, 'package.json'); const packageData = await fs.readFile(packageJsonPath, 'utf8'); const packageJson = JSON.parse(packageData); analysis.dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies }; if (packageJson.dependencies?.react) analysis.frameworks.push('React'); if (packageJson.dependencies?.vue) analysis.frameworks.push('Vue'); if (packageJson.dependencies?.express) analysis.frameworks.push('Express'); if (packageJson.dependencies?.next) analysis.frameworks.push('Next.js'); } catch {} try { const composerPath = path.join(projectPath, 'composer.json'); const composerData = await fs.readFile(composerPath, 'utf8'); const composer = JSON.parse(composerData); if (composer.require?.['laravel/framework']) analysis.frameworks.push('Laravel'); if (composer.require?.['symfony/framework-bundle']) analysis.frameworks.push('Symfony'); } catch {} async function scanDirectory(dir, depth = 0) { if (depth > 5) return; const entries = await fs.readdir(dir, { withFileTypes: true }); for (const entry of entries) { const fullPath = path.join(dir, entry.name); if (entry.name === 'node_modules' || entry.name === '.git') continue; if (entry.isFile()) { const ext = path.extname(entry.name); analysis.languages[ext] = (analysis.languages[ext] || 0) + 1; if (entry.name === 'webpack.config.js') analysis.frameworks.push('Webpack'); if (entry.name === 'vite.config.js') analysis.frameworks.push('Vite'); if (entry.name === 'docker-compose.yml') analysis.frameworks.push('Docker'); } else if (entry.isDirectory()) { await scanDirectory(fullPath, depth + 1); } } } await scanDirectory(projectPath); analysis.frameworks = [...new Set(analysis.frameworks)]; return analysis; }; app.post('/esp/scan', async (req, res) => { try { const { project_path, license_key } = req.body; const analysis = await analyzeEnvironment(project_path); res.json({ success: true, analysis: analysis, scan_id: crypto.randomUUID(), timestamp: new Date().toISOString() }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); app.post('/esp/validate', async (req, res) => { const { scan_id, hash } = req.body; res.json({ valid: true, scan_id: scan_id }); }); app.get('/esp/health', (req, res) => { res.json({ status: 'healthy', version: '1.0.0', uptime: process.uptime() }); }); app.listen(PORT, () => { console.log(`ESP Service running on port ${PORT}`); });