UNPKG

aiwf

Version:

AI Workflow Framework for Claude Code with multi-language support (Korean/English)

60 lines (48 loc) 1.6 kB
import express, { Application } from 'express'; import cors from 'cors'; import helmet from 'helmet'; import compression from 'compression'; import rateLimit from 'express-rate-limit'; import swaggerUi from 'swagger-ui-express'; import { swaggerSpec } from '@config/swagger'; import { errorHandler } from '@middleware/errorHandler'; import { notFoundHandler } from '@middleware/notFoundHandler'; import { requestLogger } from '@middleware/requestLogger'; import { aiwfMiddleware } from '@middleware/aiwfMiddleware'; import routes from '@routes/index'; const app: Application = express(); // Security middleware app.use(helmet()); app.use(cors()); // Rate limiting const limiter = rateLimit({ windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000'), max: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '100'), message: 'Too many requests from this IP, please try again later.', }); app.use('/api', limiter); // Body parsing middleware app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // Compression middleware app.use(compression()); // Request logging app.use(requestLogger); // AIWF integration app.use(aiwfMiddleware); // API Documentation app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec)); // Health check app.get('/health', (req, res) => { res.status(200).json({ status: 'healthy', timestamp: new Date().toISOString(), uptime: process.uptime(), }); }); // API routes app.use('/api', routes); // Error handlers app.use(notFoundHandler); app.use(errorHandler); export default app;