import { Router, Request, Response } from 'express' import { sessionAuth } from '../middleware/auth.js' const router = Router() router.all('/*', sessionAuth, async (req: Request, res: Response) => { const session = req.session! const targetPath = req.originalUrl.replace(/^\/proxy/, '') const targetUrl = `${session.site_url}${targetPath}` try { const headers: Record = { 'Authorization': session.access_token, 'Content-Type': req.headers['content-type'] || 'application/json' } const fetchOptions: RequestInit = { method: req.method, headers } if (['POST', 'PUT', 'PATCH'].includes(req.method) && req.body) { fetchOptions.body = JSON.stringify(req.body) } const response = await fetch(targetUrl, fetchOptions) const contentType = response.headers.get('content-type') || '' res.status(response.status) const forwardHeaders = ['content-type', 'x-request-id'] for (const h of forwardHeaders) { const val = response.headers.get(h) if (val) res.setHeader(h, val) } if (contentType.includes('application/json')) { const data = await response.json() res.json(data) } else { const buffer = await response.arrayBuffer() res.send(Buffer.from(buffer)) } } catch (error: any) { res.status(502).json({ success: false, message: `代理请求失败: ${error.message}` }) } }) export default router