proxy / server.js
ardasen's picture
Create server.js
6060914 verified
const express = require('express');
const proxy = require('express-http-proxy');
const bodyParser = require('body-parser');
const rateLimit = require('express-rate-limit');
const requestIp = require('request-ip');
const app = express();
const proxyKey = process.env.PROXY_KEY; // Your secret proxy key
const adminKey = process.env.ADMIN_KEY; // Your admin key for securing the proxy key endpoint
const port = 7860;
const baseUrl = getExternalUrl(process.env.SPACE_ID);
app.use(bodyParser.json({ limit: '50mb' }));
app.set('trust proxy', 1);
// Rate limiting middleware
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 50, // limit each IP to 50 requests per windowMs
keyGenerator: (req, res) => req.ip,
handler: (req, res) => {
res.status(429).json({
message: "Too many requests. Please try again later. You can retry after 15 minutes.",
});
},
});
// Apply the rate limiter to all requests
app.use(limiter);
// Endpoint to get the proxy key
app.get('/get-proxy-key', (req, res) => {
const providedAdminKey = req.headers['admin-key'];
if (providedAdminKey && providedAdminKey === adminKey) {
res.json({ proxyKey });
} else {
res.status(403).json({ error: 'Forbidden' });
}
});
// Health check endpoint
app.get("/", (req, res) => {
res.send(`This is your OpenAI Reverse Proxy URL: ${baseUrl}`);
});
// Helper function to get the external URL
function getExternalUrl(spaceId) {
try {
const [username, spacename] = spaceId.split("/");
return `https://${username}-${spacename.replace(/_/g, "-")}.hf.space/api/v1`;
} catch (e) {
return "";
}
}
// Start the server
app.listen(port, () => {
console.log(`Reverse proxy server running on ${baseUrl}`);
});