ai-wpa/docs/API.md

504 lines
11 KiB
Markdown

# SiliconPin API Documentation
This document describes the comprehensive API endpoints available in the SiliconPin platform.
## Base URL
- Development: `http://localhost:4024`
- Production: `https://siliconpin.com`
## Authentication
This API uses JWT (JSON Web Tokens) for authentication. Tokens are stored in HTTP-only cookies for security.
### Authentication Flow
1. Register or login to receive access and refresh tokens
2. Access token is valid for 15 minutes
3. Refresh token is valid for 7 days
4. When access token expires, use refresh endpoint to get new tokens
5. All protected routes require valid access token in cookies
## API Endpoints
### Authentication Endpoints
#### POST /api/auth/register
Register a new user account.
**Request Body:**
```json
{
"name": "John Doe",
"email": "john@example.com",
"password": "securePassword123"
}
```
**Validation:**
- `name`: Required, minimum 2 characters
- `email`: Required, valid email format
- `password`: Required, minimum 6 characters
**Response (201 Created):**
```json
{
"success": true,
"data": {
"user": {
"id": "64f5a2b4c8d9e1f2a3b4c5d6",
"name": "John Doe",
"email": "john@example.com",
"createdAt": "2024-01-15T10:30:00.000Z"
}
},
"message": "User registered successfully"
}
```
**Error Responses:**
```json
// 400 Bad Request - Validation Error
{
"success": false,
"error": "Validation failed",
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
// 409 Conflict - User Already Exists
{
"success": false,
"error": "User with this email already exists"
}
```
#### POST /api/auth/login
Sign in an existing user.
**Request Body:**
```json
{
"email": "john@example.com",
"password": "securePassword123"
}
```
**Response (200 OK):**
```json
{
"success": true,
"data": {
"user": {
"id": "64f5a2b4c8d9e1f2a3b4c5d6",
"name": "John Doe",
"email": "john@example.com"
}
},
"message": "Login successful"
}
```
**Sets Cookies:**
- `accessToken`: HTTP-only, expires in 15 minutes
- `refreshToken`: HTTP-only, expires in 7 days
**Error Responses:**
```json
// 401 Unauthorized - Invalid Credentials
{
"success": false,
"error": "Invalid email or password"
}
```
#### POST /api/auth/logout
Sign out the current user.
**Authorization:** Required (access token in cookies)
**Response (200 OK):**
```json
{
"success": true,
"message": "Logout successful"
}
```
**Effect:** Clears authentication cookies
#### POST /api/auth/refresh
Refresh the access token using refresh token.
**Authorization:** Required (refresh token in cookies)
**Response (200 OK):**
```json
{
"success": true,
"message": "Token refreshed successfully"
}
```
**Sets Cookies:**
- New `accessToken`: HTTP-only, expires in 15 minutes
- New `refreshToken`: HTTP-only, expires in 7 days
**Error Responses:**
```json
// 401 Unauthorized - Invalid Refresh Token
{
"success": false,
"error": "Invalid or expired refresh token"
}
```
#### GET /api/auth/me
Get current user information.
**Authorization:** Required (access token in cookies)
**Response (200 OK):**
```json
{
"success": true,
"data": {
"user": {
"id": "64f5a2b4c8d9e1f2a3b4c5d6",
"name": "John Doe",
"email": "john@example.com",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:30:00.000Z"
}
}
}
```
**Error Responses:**
```json
// 401 Unauthorized - No Token or Invalid Token
{
"success": false,
"error": "Authentication required"
}
```
## Error Handling
All API endpoints follow a consistent error response format:
### Standard Error Response
```json
{
"success": false,
"error": "Error message",
"details": [] // Optional array of detailed errors
}
```
### HTTP Status Codes
- `200` - Success
- `201` - Created (successful registration)
- `400` - Bad Request (validation errors)
- `401` - Unauthorized (authentication required/failed)
- `403` - Forbidden (access denied)
- `404` - Not Found
- `409` - Conflict (resource already exists)
- `500` - Internal Server Error
### Validation Errors
When validation fails, the API returns detailed error information:
```json
{
"success": false,
"error": "Validation failed",
"details": [
{
"field": "email",
"message": "Invalid email format"
},
{
"field": "password",
"message": "Password must be at least 6 characters"
}
]
}
```
## Rate Limiting
Currently, no rate limiting is implemented. For production deployment, consider adding rate limiting to prevent abuse:
- Login attempts: 5 per minute per IP
- Registration: 3 per minute per IP
- General API: 100 per minute per IP
## CORS Configuration
CORS is configured to allow requests from your frontend domain. In development, all origins are allowed.
## Security Headers
The API includes security headers:
- `Content-Security-Policy`
- `X-Content-Type-Options: nosniff`
- `X-Frame-Options: DENY`
- `X-XSS-Protection: 1; mode=block`
## Frontend Integration
### Using with fetch API
```javascript
// Login example
const login = async (email, password) => {
const response = await fetch('/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ email, password }),
credentials: 'include', // Important: include cookies
})
const data = await response.json()
if (!data.success) {
throw new Error(data.error)
}
return data
}
// Protected API call example
const getUserProfile = async () => {
const response = await fetch('/api/auth/me', {
method: 'GET',
credentials: 'include', // Important: include cookies
})
const data = await response.json()
if (!data.success) {
if (response.status === 401) {
// Token expired, try to refresh
await refreshToken()
// Retry the original request
return getUserProfile()
}
throw new Error(data.error)
}
return data
}
```
### Using with Axios
```javascript
import axios from 'axios'
// Configure axios to include cookies
axios.defaults.withCredentials = true
// Request interceptor for automatic token refresh
axios.interceptors.response.use(
(response) => response,
async (error) => {
if (error.response?.status === 401) {
try {
await axios.post('/api/auth/refresh')
// Retry the original request
return axios.request(error.config)
} catch (refreshError) {
// Refresh failed, redirect to login
window.location.href = '/auth'
}
}
return Promise.reject(error)
}
)
```
## Testing the API
### Using curl
```bash
# Register a new user
curl -X POST http://localhost:4024/api/auth/register \
-H "Content-Type: application/json" \
-d '{"name":"Test User","email":"test@example.com","password":"password123"}' \
-c cookies.txt
# Login
curl -X POST http://localhost:4024/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"password123"}' \
-c cookies.txt
# Get user profile (protected route)
curl -X GET http://localhost:4024/api/auth/me \
-b cookies.txt
# Logout
curl -X POST http://localhost:4024/api/auth/logout \
-b cookies.txt
```
### Using Postman
1. Set up environment variables for base URL
2. Use "Send and download cookies" option in requests
3. Test the authentication flow step by step
4. Save cookies between requests for protected routes
## Extending the API
### Adding New Protected Routes
```typescript
// app/api/example/route.ts
import { authMiddleware } from '@/lib/auth-middleware'
export async function GET(request: Request) {
// Authenticate the request
const user = await authMiddleware(request)
if (!user) {
return Response.json({ success: false, error: 'Authentication required' }, { status: 401 })
}
// Your protected logic here
return Response.json({
success: true,
data: { message: 'Protected data', user: user.id },
})
}
```
### Adding Request Validation
```typescript
import { z } from 'zod'
const CreatePostSchema = z.object({
title: z.string().min(1, 'Title is required'),
content: z.string().min(10, 'Content must be at least 10 characters'),
})
export async function POST(request: Request) {
try {
const body = await request.json()
const validatedData = CreatePostSchema.parse(body)
// Process validated data
} catch (error) {
if (error instanceof z.ZodError) {
return Response.json(
{
success: false,
error: 'Validation failed',
details: error.errors.map((err) => ({
field: err.path.join('.'),
message: err.message,
})),
},
{ status: 400 }
)
}
return Response.json({ success: false, error: 'Internal server error' }, { status: 500 })
}
}
```
## Additional API Endpoints
SiliconPin includes extensive API coverage beyond authentication:
### Topics API
- `GET /api/topics` - List all topics with search and filtering
- `POST /api/topics` - Create new topic (protected)
- `GET /api/topics/[slug]` - Get specific topic
- `PUT /api/topic/[id]` - Update topic (protected, owner only)
- `DELETE /api/topic/[id]` - Delete topic (protected, owner only)
- `GET /api/topics/[slug]/related` - Get related topics
- `POST /api/topics/[slug]/view` - Track topic views
### Admin API (Protected, Admin Only)
- `GET /api/admin/dashboard` - Admin dashboard statistics
- `GET /api/admin/users` - User management
- `GET /api/admin/billing` - Billing management
- `GET /api/admin/reports` - Generate reports
- `GET /api/admin/services` - Service management
- `GET /api/admin/settings` - System settings
### Services API
- `POST /api/services/deploy-kubernetes` - Deploy K8s service
- `POST /api/services/deploy-vpn` - Deploy VPN service
- `POST /api/services/deploy-cloude` - Deploy cloud instance
- `POST /api/services/hire-developer` - Developer hiring request
- `GET /api/services/active` - Get active services
### Payment & Billing API
- `POST /api/balance/add` - Add balance to account
- `POST /api/balance/deduct` - Deduct balance
- `GET /api/user/balance` - Get user balance
- `POST /api/payments/initiate` - Initiate payment
- `GET /api/billing` - Get billing history
- `GET /api/billing/stats` - Billing statistics
- `GET /api/transactions` - Transaction history
### Tools API
- `POST /api/tools/openai-chat` - OpenAI chat integration
### Upload & File Management
- `POST /api/upload` - Upload files to MinIO
- `POST /api/upload/confirm` - Confirm file upload
- `POST /api/topic-content-image` - Upload topic images
### Utility API
- `GET /api/health` - Health check endpoint
- `POST /api/contact` - Contact form submission
- `POST /api/feedback` - Submit feedback
- `GET /api/tags` - Get all available tags
- `GET /api/startup-test` - System startup validation
This comprehensive API documentation covers the complete SiliconPin platform, providing authentication, content management, admin capabilities, web services, payment processing, and utility endpoints.