Files
makemd/server/src/index.ts

130 lines
4.8 KiB
TypeScript
Raw Normal View History

import cors from 'cors';
import dotenv from 'dotenv';
import express from 'express';
import { DomainBootstrap } from './core/runtime/DomainBootstrap';
import { logger } from './utils/logger';
// API Routes
import aiRoutes from './api/routes/ai';
import arbitrageRoutes from './api/routes/arbitrage';
import auditRoutes from './api/routes/audit';
import authRoutes from './api/routes/auth';
import billingRoutes from './api/routes/billing';
import bizRoutes from './api/routes/biz';
import chatbotRoutes from './api/routes/chatbot';
import commandRoutes from './api/routes/command';
import configRoutes from './api/routes/config';
import liteConsoleRoutes from './api/routes/console_lite';
import creativeRoutes from './api/routes/creative';
import customerRoutes from './api/routes/customer';
import financeRoutes from './api/routes/finance';
import governanceRoutes from './api/routes/governance';
import marketingRoutes from './api/routes/marketing';
import nodeRoutes from './api/routes/node';
import orderRoutes from './api/routes/order';
import productRoutes from './api/routes/product';
import publishRoutes from './api/routes/publish';
import reportRoutes from './api/routes/report';
import sovereigntyRoutes from './api/routes/sovereignty';
import strategyRoutes from './api/routes/strategy';
import syncRoutes from './api/routes/sync';
import telemetryRoutes from './api/routes/telemetry';
import tenantRoutes from './api/routes/tenant';
import traceRoutes from './api/routes/trace';
import tradeRoutes from './api/routes/trade';
import vaultRoutes from './api/routes/vault';
import webhookRoutes from './api/routes/webhook';
// Platform Connectors
import { AliExpressConnector } from './core/connectors/AliExpressConnector';
import { AmazonConnector } from './core/connectors/AmazonConnector';
import { ConnectorBus } from './core/connectors/IPlatformConnector';
import { ShopeeConnector } from './core/connectors/ShopeeConnector';
import { ShopifyConnector } from './core/connectors/ShopifyConnector';
import { TikTokConnector } from './core/connectors/TikTokConnector';
// Guards
import { mtlsGuard } from './core/guards/mtls.guard';
import { slaGuard } from './core/guards/sla.guard';
import { requireTraceContext } from './core/guards/trace-context.guard';
// Workers
import { startAuditWorker } from './services/AuditWorker';
import { CrawlerWorker } from './workers/CrawlerWorker';
dotenv.config();
const app = express();
const PORT = process.env.PORT || 3003;
// Global Middleware
app.use(cors());
app.use(express.json());
app.use(requireTraceContext);
app.use(mtlsGuard);
app.use(slaGuard);
// API Routes (V1)
app.use('/api/v1/auth', authRoutes);
app.use('/api/v1/billing', billingRoutes);
app.use('/api/v1/arbitrage', arbitrageRoutes);
app.use('/api/v1/orders', orderRoutes);
app.use('/api/v1/biz', bizRoutes);
app.use('/api/v1/creative', creativeRoutes);
app.use('/api/v1/customer', customerRoutes);
app.use('/api/v1/report', reportRoutes);
app.use('/api/v1/lite', liteConsoleRoutes);
app.use('/api/v1/tenant', tenantRoutes);
app.use('/api/v1/product', productRoutes);
app.use('/api/v1/publish', publishRoutes);
app.use('/api/v1/trade', tradeRoutes);
app.use('/api/v1/finance', financeRoutes);
app.use('/api/v1/strategy', strategyRoutes);
app.use('/api/v1/sovereignty', sovereigntyRoutes);
app.use('/api/v1/governance', governanceRoutes);
app.use('/api/v1/audit', auditRoutes);
app.use('/api/v1/trace', traceRoutes);
app.use('/api/v1/sync', syncRoutes);
app.use('/api/v1/config', configRoutes);
app.use('/api/v1/vault', vaultRoutes);
app.use('/api/v1/telemetry', telemetryRoutes);
app.use('/api/v1/webhook', webhookRoutes);
app.use('/api/v1/node', nodeRoutes);
app.use('/api/v1/ai', aiRoutes);
app.use('/api/v1/chatbot', chatbotRoutes);
app.use('/api/v1/command', commandRoutes);
app.use('/api/v1/marketing', marketingRoutes);
// Register Platform Connectors
ConnectorBus.register(new TikTokConnector());
ConnectorBus.register(new ShopeeConnector());
ConnectorBus.register(new ShopifyConnector());
ConnectorBus.register(new AmazonConnector());
ConnectorBus.register(new AliExpressConnector());
// Start Background Workers
startAuditWorker();
CrawlerWorker.init();
/**
* [ARCH_LIGHT_03] (Global Startup Flow)
* @description 使 DomainBootstrap index.ts
*/
async function startServer() {
try {
// 1. 领域初始化 (含 DB 建表与 AGI 降级检查)
await DomainBootstrap.init();
// 2. 启动 HTTP 服务
app.listen(PORT, () => {
logger.info(`🚀 Console Server running on http://localhost:${PORT}`);
logger.info('✅ All backend services initialized successfully');
});
} catch (err: any) {
logger.error(`❌ Failed to start server: ${err.message}`);
process.exit(1);
}
}
startServer();