File size: 1,748 Bytes
6060914 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 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}`);
});
|