Spaces:
Running
Running
Update server.js
Browse files
server.js
CHANGED
@@ -10,12 +10,29 @@ const baseUrl = getExternalUrl(process.env.SPACE_ID);
|
|
10 |
let requestDetails = [];
|
11 |
let ipRequestCounts = {};
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
app.use('/api', (req, res, next) => {
|
14 |
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
|
15 |
const currentCount = ipRequestCounts[ip] || 0;
|
16 |
|
17 |
if (currentCount >= 1) {
|
18 |
-
res.status(429).send('You have reached your request limit of
|
19 |
return;
|
20 |
}
|
21 |
|
@@ -31,20 +48,19 @@ app.use('/api', (req, res, next) => {
|
|
31 |
console.log(`Request ${requestData.requestNumber} from IP ${requestData.ip} on ${requestData.timestamp}`);
|
32 |
|
33 |
next();
|
34 |
-
},
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
message: 'Request limit reached on the proxied service. Please try again later.'
|
43 |
});
|
44 |
}
|
45 |
-
|
46 |
-
|
47 |
-
})
|
48 |
|
49 |
app.get("/", (req, res) => {
|
50 |
let requestsInfo = requestDetails.map(detail =>
|
|
|
10 |
let requestDetails = [];
|
11 |
let ipRequestCounts = {};
|
12 |
|
13 |
+
// Declare the proxy as middleware which can be reused
|
14 |
+
const openAiProxy = proxy(targetUrl, {
|
15 |
+
proxyReqOptDecorator: (proxyReqOpts, srcReq) => {
|
16 |
+
proxyReqOpts.headers['Authorization'] = 'Bearer ' + openaiKey;
|
17 |
+
return proxyReqOpts;
|
18 |
+
},
|
19 |
+
userResDecorator: (proxyRes, proxyResData, userReq, userRes) => {
|
20 |
+
const data = proxyResData.toString('utf8');
|
21 |
+
if (proxyRes.statusCode === 429) {
|
22 |
+
// Handling at userResDecorator might be skipped based on your situation, thus handling it later
|
23 |
+
return data;
|
24 |
+
}
|
25 |
+
return data; // Pass through all other non-429 responses
|
26 |
+
}
|
27 |
+
});
|
28 |
+
|
29 |
+
// Apply rate limiting and API proxying
|
30 |
app.use('/api', (req, res, next) => {
|
31 |
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
|
32 |
const currentCount = ipRequestCounts[ip] || 0;
|
33 |
|
34 |
if (currentCount >= 1) {
|
35 |
+
res.status(429).send('You have reached your request limit of 1 message. Please contact support for more details.');
|
36 |
return;
|
37 |
}
|
38 |
|
|
|
48 |
console.log(`Request ${requestData.requestNumber} from IP ${requestData.ip} on ${requestData.timestamp}`);
|
49 |
|
50 |
next();
|
51 |
+
}, openAiProxy);
|
52 |
+
|
53 |
+
// Modify proxy responses after the proxy has finished
|
54 |
+
app.use('/api', function(req, res, next) {
|
55 |
+
res.on('finish', function() {
|
56 |
+
if (res.statusCode === 429 && !res.headersSent) {
|
57 |
+
res.status(429).json({
|
58 |
+
message: 'Custom message for 429 status.'
|
|
|
59 |
});
|
60 |
}
|
61 |
+
});
|
62 |
+
next();
|
63 |
+
});
|
64 |
|
65 |
app.get("/", (req, res) => {
|
66 |
let requestsInfo = requestDetails.map(detail =>
|