import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ValidationPipe } from '@nestjs/common'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe()); app.enableCors({ origin: true, // Allow all origins methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS', credentials: true, }); app.setGlobalPrefix('api'); // Set a global API prefix // Swagger / OpenAPI documentation const config = new DocumentBuilder() .setTitle('AuraK API') .setDescription(` ## AuraK 知识库平台 API 文档 ### 认证方式 本系统支持两种认证方式: #### 1. API Key (推荐用于外部系统) | Header | 说明 | 必需 | |--------|------|------| | \`x-api-key\` | API Key值 (格式: kb_xxx) | ✅ 必需 | | \`x-tenant-id\` | 租户ID (用户有多租户时必填) | 可选 | 或使用 Authorization 头: \`Authorization: Bearer kb_xxx\` #### 2. JWT Token (用于前端应用) \`Authorization: Bearer jwt_token\` ### API分类 - **开放API (V1)**: \`/api/v1/*\` - 支持API Key认证,用于外部系统集成 - **内部API**: \`/api/*\` - 支持JWT认证,用于前端应用 ### 主要功能模块 - 知识库管理 (Knowledge Base) - RAG聊天 (Chat with RAG) - 模型配置 (Model Configuration) - 用户管理 (User Management) - 租户管理 (Tenant Management) - 知识分组 (Knowledge Groups) `) .setVersion('2.0') .addApiKey({ type: 'apiKey', name: 'x-api-key', in: 'header' }, 'x-api-key') .addBearerAuth( { type: 'http', scheme: 'bearer', bearerFormat: 'JWT', name: 'JWT', description: '输入 JWT token', in: 'header', }, 'JWT', ) .addTag('API v1', '开放API接口 - 使用API Key认证') .addTag('Auth', '认证接口') .addTag('Users', '用户管理') .addTag('Chat', '聊天接口') .addTag('Knowledge Base', '知识库管理') .addTag('Knowledge Groups', '知识分组') .addTag('Models', '模型配置') .addTag('Tenants', '租户管理') .build(); const document = SwaggerModule.createDocument(app, config); SwaggerModule.setup('api/docs', app, document); await app.listen(process.env.PORT ?? 3001); // Ensure "Default" tenant exists const { TenantService } = await import('./tenant/tenant.service'); const tenantService = app.get(TenantService); await tenantService.ensureDefaultTenant(); } bootstrap();