WalleGriffkinder commited on
Commit
32ccfb1
·
verified ·
1 Parent(s): 11e4d16

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +30 -31
index.js CHANGED
@@ -3,56 +3,55 @@ import fetch from 'node-fetch';
3
 
4
  const app = express();
5
 
6
- // Принимаем сырые данные
7
- app.use(express.raw({type: '*/*', limit: '50mb'}));
 
 
 
8
 
9
  const MY_DOMAIN = 'https://wallegriffkinder-testinghf23.hf.space/';
10
 
11
- app.use(async (req, res) => {
12
  try {
13
- const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
14
-
15
- // Просто берем всё после нашего домена, без лишних проверок
16
- const targetUrl = fullUrl.substring(fullUrl.indexOf(MY_DOMAIN) + MY_DOMAIN.length);
17
 
 
18
  const headers = {...req.headers};
19
  delete headers['host'];
20
- delete headers['content-length'];
21
- delete headers['transfer-encoding'];
22
- delete headers['connection'];
23
 
24
- const response = await fetch(targetUrl, {
 
25
  method: req.method,
26
  headers,
27
- body: req.method !== 'GET' ? req.body : undefined,
28
- redirect: 'follow',
29
- });
30
 
31
- // Копируем заголовки
32
- for (const [key, value] of response.headers) {
33
- if (!['connection', 'transfer-encoding'].includes(key.toLowerCase())) {
34
- res.setHeader(key, value);
35
- }
36
  }
37
 
38
- // CORS
39
- res.setHeader('Access-Control-Allow-Origin', '*');
40
- res.setHeader('Access-Control-Allow-Methods', '*');
41
- res.setHeader('Access-Control-Allow-Headers', '*');
42
 
43
- if (req.method === 'OPTIONS') {
44
- return res.status(200).end();
 
45
  }
46
 
47
- res.status(response.status);
48
- return response.body.pipe(res);
49
 
50
  } catch (error) {
51
- console.error(error);
52
- res.status(500).send('Proxy Error');
53
  }
54
  });
55
 
56
- app.listen(7860, '0.0.0.0', () => {
57
- console.log('Server running on port 7860');
 
58
  });
 
3
 
4
  const app = express();
5
 
6
+ // Даже не парсим тело запроса, просто стримим как есть
7
+ app.use((req, res, next) => {
8
+ req.pipe = true;
9
+ next();
10
+ });
11
 
12
  const MY_DOMAIN = 'https://wallegriffkinder-testinghf23.hf.space/';
13
 
14
+ app.all('*', async (req, res) => {
15
  try {
16
+ // Получаем оригинальный URL без изменений
17
+ const targetUrl = req.originalUrl.substring(1); // убираем только первый слеш
 
 
18
 
19
+ // Копируем заголовки как есть
20
  const headers = {...req.headers};
21
  delete headers['host'];
 
 
 
22
 
23
+ // Создаем новый запрос
24
+ const fetchOptions = {
25
  method: req.method,
26
  headers,
27
+ duplex: 'half',
28
+ };
 
29
 
30
+ // Для не-GET запросов стримим тело
31
+ if (req.method !== 'GET') {
32
+ fetchOptions.body = req;
 
 
33
  }
34
 
35
+ const response = await fetch(targetUrl, fetchOptions);
36
+
37
+ // Копируем статус
38
+ res.status(response.status);
39
 
40
+ // Копируем заголовки
41
+ for (const [key, value] of response.headers) {
42
+ res.setHeader(key, value);
43
  }
44
 
45
+ // Стримим ответ напрямую
46
+ response.body.pipe(res);
47
 
48
  } catch (error) {
49
+ console.error('Proxy error:', error);
50
+ res.status(500).end();
51
  }
52
  });
53
 
54
+ const port = 7860;
55
+ app.listen(port, '0.0.0.0', () => {
56
+ console.log(`Server running on port ${port}`);
57
  });