aiwf
Version:
AI Workflow Framework for Claude Code with multi-language support (Korean/English)
60 lines (48 loc) • 1.6 kB
text/typescript
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;