WalleGriffkinder commited on
Commit
464a48d
·
verified ·
1 Parent(s): 1c96637

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +23 -31
index.js CHANGED
@@ -4,61 +4,53 @@ import fetch from 'node-fetch';
4
  const app = express();
5
  app.use(express.raw({type: '*/*'}));
6
 
7
- // Hello World на главной
8
- app.get('/', (req, res) => {
9
- res.send('Hello World');
10
- });
11
 
12
- // Прокси для всех остальных путей
13
  app.all('*', async (req, res) => {
14
- if (req.url === '/') return;
 
 
15
 
16
  try {
17
- // Получаем полный URL запроса
18
  const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
19
-
20
- // Находим позицию после нашего домена
21
- const domainEnd = fullUrl.indexOf('/', 8); // пропускаем https://
22
-
23
- // Извлекаем целевой URL
24
- const targetUrl = fullUrl.substring(domainEnd + 1);
25
-
26
- // Проверяем что это валидный URL
27
- if (!targetUrl.startsWith('http')) {
28
- return res.status(400).send('Invalid URL');
29
- }
30
 
31
- // Копируем и фильтруем заголовки
32
  const headers = {...req.headers};
33
  delete headers['host'];
34
  delete headers['content-length'];
 
 
35
 
 
36
  const response = await fetch(targetUrl, {
37
  method: req.method,
38
  headers,
39
- body: req.method !== 'GET' ? req.body : undefined
 
40
  });
41
 
42
- // Streaming response
 
 
 
 
 
 
 
43
  if (response.headers.get('content-type')?.includes('text/event-stream')) {
44
  res.setHeader('Content-Type', 'text/event-stream');
45
- response.body.pipe(res);
46
- return;
47
  }
48
 
49
- // Копируем все заголовки из ответа
50
- response.headers.forEach((value, key) => {
51
- res.setHeader(key, value);
52
- });
53
-
54
- // Regular response
55
  const data = await response.buffer();
56
  res.status(response.status);
57
  res.send(data);
58
 
59
  } catch (error) {
60
- console.error('Proxy error:', error);
61
- res.status(500).send(error.message);
62
  }
63
  });
64
 
 
4
  const app = express();
5
  app.use(express.raw({type: '*/*'}));
6
 
7
+ const MY_DOMAIN = 'https://wallegriffkinder-testinghf23.hf.space/';
 
 
 
8
 
 
9
  app.all('*', async (req, res) => {
10
+ if (req.url === '/') {
11
+ return res.send('OK');
12
+ }
13
 
14
  try {
15
+ // Получаем полный URL и убираем наш домен
16
  const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
17
+ const targetUrl = fullUrl.substring(fullUrl.indexOf(MY_DOMAIN) + MY_DOMAIN.length);
 
 
 
 
 
 
 
 
 
 
18
 
19
+ // Копируем все заголовки
20
  const headers = {...req.headers};
21
  delete headers['host'];
22
  delete headers['content-length'];
23
+ delete headers['connection'];
24
+ delete headers['transfer-encoding'];
25
 
26
+ // Делаем запрос с сохранением всех параметров
27
  const response = await fetch(targetUrl, {
28
  method: req.method,
29
  headers,
30
+ body: req.method !== 'GET' ? req.body : undefined,
31
+ redirect: 'follow',
32
  });
33
 
34
+ // Копируем все заголовки ответа
35
+ response.headers.forEach((value, key) => {
36
+ if (!['connection', 'transfer-encoding'].includes(key.toLowerCase())) {
37
+ res.setHeader(key, value);
38
+ }
39
+ });
40
+
41
+ // Для потоковых ответов
42
  if (response.headers.get('content-type')?.includes('text/event-stream')) {
43
  res.setHeader('Content-Type', 'text/event-stream');
44
+ return response.body.pipe(res);
 
45
  }
46
 
47
+ // Для обычных ответов
 
 
 
 
 
48
  const data = await response.buffer();
49
  res.status(response.status);
50
  res.send(data);
51
 
52
  } catch (error) {
53
+ res.status(500).send('Proxy Error');
 
54
  }
55
  });
56