init commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import http from 'http';
|
||||
import https from 'https';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const PORT = 3000;
|
||||
|
||||
const MIME = {
|
||||
'.html': 'text/html',
|
||||
'.js': 'application/javascript',
|
||||
'.css': 'text/css',
|
||||
'.json': 'application/json',
|
||||
};
|
||||
|
||||
function proxyOnvista(req, res) {
|
||||
const url = new URL(req.url, `http://localhost:${PORT}`);
|
||||
|
||||
// Forward all query params as-is to onvista
|
||||
const upstream = `https://api.onvista.de/api/v1/bonds/finder/configuration_query?${url.searchParams.toString()}`;
|
||||
|
||||
const options = {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'Accept': 'application/json',
|
||||
}
|
||||
};
|
||||
|
||||
https.get(upstream, options, upRes => {
|
||||
let body = '';
|
||||
upRes.on('data', chunk => body += chunk);
|
||||
upRes.on('end', () => {
|
||||
res.writeHead(upRes.statusCode, {
|
||||
'Content-Type': 'application/json',
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
});
|
||||
res.end(body);
|
||||
});
|
||||
}).on('error', err => {
|
||||
res.writeHead(502, { 'Content-Type': 'application/json' });
|
||||
res.end(JSON.stringify({ error: err.message }));
|
||||
});
|
||||
}
|
||||
|
||||
function serveStatic(req, res) {
|
||||
const filePath = path.join(__dirname, 'static', req.url === '/' ? 'index.html' : req.url);
|
||||
const ext = path.extname(filePath);
|
||||
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
if (err) { res.writeHead(404); res.end('Not found'); return; }
|
||||
res.writeHead(200, { 'Content-Type': MIME[ext] || 'text/plain' });
|
||||
res.end(data);
|
||||
});
|
||||
}
|
||||
|
||||
const server = http.createServer((req, res) => {
|
||||
if (req.url.startsWith('/api/bonds')) {
|
||||
proxyOnvista(req, res);
|
||||
} else {
|
||||
serveStatic(req, res);
|
||||
}
|
||||
});
|
||||
|
||||
server.listen(PORT, () => console.log(`Bond Sniffer running at http://localhost:${PORT}`));
|
||||
Reference in New Issue
Block a user