- FastAPI backend with SQLModel, Alembic migrations, AgentScope agents - Next.js 15 frontend with React 19, Tailwind, Zustand, React Flow - Multi-provider AI system (DashScope, Kling, MiniMax, Volcengine, OpenAI, etc.) - All HTTP clients migrated from sync requests to async httpx - Admin-managed API keys via environment variables - SSRF vulnerability fixed in ensure_url()
85 lines
2.3 KiB
Python
85 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate TypeScript ErrorCode enum from Python ErrorCode enum
|
|
|
|
Usage:
|
|
python scripts/generate_error_codes_ts.py > ../frontend/src/lib/errors.ts
|
|
|
|
This script synchronizes the frontend ErrorCode enum with the backend definition
|
|
to ensure consistency across the project.
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add src to path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
|
|
from src.utils.errors import ErrorCode
|
|
|
|
|
|
def generate_typescript():
|
|
lines = [
|
|
"import { logger } from './utils/logger';",
|
|
"",
|
|
"/**",
|
|
" * Frontend Error Handling Module",
|
|
" * Provides standardized error codes, user-friendly messages, and retry logic",
|
|
" *",
|
|
" * Error codes are synchronized with backend:",
|
|
" * Format: 4-digit string",
|
|
" * - 0000: Success",
|
|
" * - 1xxx: General errors",
|
|
" * - 2xxx: Business errors",
|
|
" * - 3xxx: Task errors",
|
|
" * - 4xxx: AI service errors",
|
|
" * - 5xxx: Storage errors",
|
|
" */",
|
|
"",
|
|
"/**",
|
|
" * Error codes matching backend error responses",
|
|
" * Auto-synchronized with backend/src/utils/errors.py",
|
|
" */",
|
|
"export enum ErrorCode {",
|
|
]
|
|
|
|
# Group error codes by category for better organization
|
|
categories = {
|
|
"0000": "Success",
|
|
"1": "General errors",
|
|
"2": "Business errors",
|
|
"3": "Task errors",
|
|
"4": "AI service errors",
|
|
"5": "Storage errors",
|
|
}
|
|
|
|
current_category = None
|
|
|
|
# Add backend error codes
|
|
for code in ErrorCode:
|
|
category = code.value[0] if code.value != "0000" else "0000"
|
|
|
|
if category != current_category:
|
|
if current_category is not None:
|
|
lines.append("")
|
|
if category in categories:
|
|
lines.append(f" // {categories[category]} ({category}xxx)")
|
|
current_category = category
|
|
|
|
lines.append(f" {code.name} = '{code.value}',")
|
|
|
|
# Add frontend-specific error codes
|
|
lines.extend([
|
|
"",
|
|
" // Frontend-specific errors (not from backend)",
|
|
" NETWORK_ERROR = 'NET01',",
|
|
" TIMEOUT_ERROR = 'TIM01',",
|
|
"}",
|
|
])
|
|
|
|
return "\n".join(lines)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(generate_typescript())
|