const express = require('express'); const morgan = require('morgan'); const { createProxyMiddleware } = require('http-proxy-middleware'); const axios = require('axios'); const fs = require('fs'); const app = express(); app.use(morgan('dev')); app.use(express.json()); // 生成随机字符串的函数 function getRandomIDPro({ size, dictType, customDict }) { let random = ''; if (!customDict) { switch (dictType) { case 'alphabet': customDict = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 'max': customDict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-'; break; default: customDict = '0123456789'; } } for (; size--; ) random += customDict[(Math.random() * customDict.length) | 0]; return random; } // 模型列表路由 app.get('/hf/v1/models', (req, res) => { const models = { "object": "list", "data": [ { "id": "claude-3.5-sonnet", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gpt-4", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gpt-4o", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "claude-3-opus", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gpt-3.5-turbo", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gpt-4-turbo-2024-04-09", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gpt-4o-128k", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gemini-1.5-flash-500k", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "claude-3-haiku-200k", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "claude-3-5-sonnet-200k", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "claude-3-5-sonnet-20241022", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gpt-4o-mini", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "o1-mini", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "o1-preview", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "o1", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "claude-3.5-haiku", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gemini-exp-1206", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gemini-2.0-flash-thinking-exp", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "gemini-2.0-flash-exp", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "deepseek-v3", "object": "model", "created": 1706745938, "owned_by": "cursor" }, { "id": "deepseek-r1", "object": "model", "created": 1706745938, "owned_by": "cursor" } ] }; res.json(models); }); // 聊天完成度代理 app.post('/hf/v1/chat/completions', async (req, res) => { try { // 生成 checksum const checksum = `ICMlQsvO${getRandomIDPro({ dictType: 'max', size: 64 })}/${getRandomIDPro({ dictType: 'max', size: 64 })}`; // 从请求头获取认证信息 const authHeader = req.headers.authorization; const token = authHeader?.replace('Bearer ', '') || ''; // 构建请求头 const headers = { 'Authorization': authHeader, 'Content-Type': 'application/json', 'x-cursor-checksum': checksum, 'x-cursor-token': token, 'User-Agent': 'cursor/0.2.0', 'Accept': 'application/json' }; // 构建请求体 const requestBody = { ...req.body, stream: false }; // 转发请求到目标服务器 const response = await axios.post('http://localhost:3010/v1/chat/completions', requestBody, { headers: headers, timeout: 30000 }); // 返回响应 res.status(response.status).json(response.data); } catch (error) { console.error('Error in chat completions:', error); if (error.response) { res.status(error.response.status).json(error.response.data); } else { res.status(500).json({ error: 'Internal server error', message: error.message }); } } }); // 主页路由 app.get('/', (req, res) => { const htmlContent = ` Cursor To OpenAI

Cursor To OpenAI Server

高性能 AI 模型代理服务

配置信息

聊天来源
自定义(兼容 OpenAI)
自定义端点(基本URL)
自定义API密钥
抓取的Cursor Cookie,格式为user_...

支持的模型列表

`; res.send(htmlContent); }); const port = process.env.HF_PORT || 7860; app.listen(port, () => { console.log(`HF Proxy server is running at PORT: ${port}`); });