Ayeantics commited on
Commit
71c1ee6
·
verified ·
1 Parent(s): d5b575b

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +29 -13
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 10 messages. Please contact support for more details.');
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
- }, proxy(targetUrl, {
35
- proxyReqOptDecorator: (proxyReqOpts, srcReq) => {
36
- proxyReqOpts.headers['Authorization'] = 'Bearer ' + openaiKey;
37
- return proxyReqOpts;
38
- },
39
- userResDecorator: (proxyRes, proxyResData, userReq, userRes) => {
40
- if (proxyRes.statusCode === 429) {
41
- return JSON.stringify({
42
- message: 'Request limit reached on the proxied service. Please try again later.'
43
  });
44
  }
45
- return proxyResData; // Return the original response body if not a 429 error
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 =>