From 4928149a9d59848d98d6b08f032d1ada63d2d6b8 Mon Sep 17 00:00:00 2001 From: zumbiepig <121742281+zumbiepig@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:24:58 -0700 Subject: [PATCH] . --- .gitignore | 1 + bun.lockb | Bin 118897 -> 120765 bytes package.json | 6 ++- proxy.ts | 23 ++++++++++ proxy/build.sh | 12 ------ proxy/proxy.ts | 113 ------------------------------------------------- 6 files changed, 29 insertions(+), 126 deletions(-) create mode 100644 proxy.ts delete mode 100755 proxy/build.sh delete mode 100644 proxy/proxy.ts diff --git a/.gitignore b/.gitignore index 6292299..86f2a45 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ package-lock.json desktop.ini public/ +proxy_linux-x64 # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore diff --git a/bun.lockb b/bun.lockb index f089f7dd980622f6ddfe14cc239931159a3e5e12..6b39d095b655998f595f6e58a9bb0312fa34f737 100755 GIT binary patch delta 22175 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 Rb(BmeSc_eaPqM-K{{yD|I&A;| delta 21160 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 D6A2~4 diff --git a/package.json b/package.json index 38d411e..1e08e64 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "build": "NODE_ENV=production bun run ./build.ts", "build:dev": "NODE_ENV=development bun run ./build.ts", "format": "prettier --write --list-different .", - "format:check": "prettier --check ." + "format:check": "prettier --check .", + "proxy": "bun run ./proxy.ts", + "proxy:build": "bun build ./proxy.ts --compile --minify --target=bun-linux-x64-modern --outfile ./proxy_linux-x64" }, "dependencies": { "chalk": "^5.3.0", @@ -18,6 +20,7 @@ "cookie-parser": "^1.4.6", "express": "^4.21.0", "helmet": "^7.1.0", + "http-proxy": "^1.18.1", "indexeddb-export-import": "^2.1.5", "jquery": "^3.7.1", "morgan": "^1.10.0", @@ -35,6 +38,7 @@ "@types/eslint-config-prettier": "^6.11.3", "@types/eslint__js": "^8.42.3", "@types/html-minifier": "^4.0.5", + "@types/http-proxy": "^1.17.15", "@types/jquery": "^3.5.30", "@types/morgan": "^1.9.9", "@types/pako": "^2.0.3", diff --git a/proxy.ts b/proxy.ts new file mode 100644 index 0000000..8a862bf --- /dev/null +++ b/proxy.ts @@ -0,0 +1,23 @@ +import express from 'express'; +import morgan from 'morgan'; +import httpProxy from 'http-proxy'; + +const PORT = process.env['PORT'] ?? 3000; + +const proxy = httpProxy.createProxyServer({ + target: 'https://launcher.orionzleon.me', + ws: true, + xfwd: true, + secure: true, + changeOrigin: true, +}); + +const app = express(); + +app.use(morgan('combined')); + +app.use((req, res) => proxy.web(req, res)); + +app.listen(PORT, () => + console.log(`Server running on http://localhost:${PORT}/`), +); diff --git a/proxy/build.sh b/proxy/build.sh deleted file mode 100755 index 65e7e25..0000000 --- a/proxy/build.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -echo 'Make sure you are running this in the `proxy` directory' && -rm -rf ./bin && -mkdir ./bin && -bun build ./proxy.ts --compile --minify --target=bun-linux-x64-modern --outfile ./bin/linux-x64 && -chmod +x ./bin/linux-x64 && -bun build ./proxy.ts --compile --minify --target=bun-linux-x64-baseline --outfile ./bin/linux-x64-compatibility && -chmod +x ./bin/linux-x64-compatibility && -bun build ./proxy.ts --compile --minify --target=bun-linux-arm64-modern --outfile ./bin/linux-arm64 && -chmod +x ./bin/linux-arm64 && -bun build ./proxy.ts --compile --minify --target=bun-linux-arm64-baseline --outfile ./bin/linux-arm64-compatibility && -chmod +x ./bin/linux-arm64-compatibility diff --git a/proxy/proxy.ts b/proxy/proxy.ts deleted file mode 100644 index a3a74af..0000000 --- a/proxy/proxy.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { type IncomingHttpHeaders } from 'http'; -import https from 'https'; -import express from 'express'; -import morgan from 'morgan'; - -if (Number(process.env['CACHE_MINUTES'] ?? 10) < 5) - process.env['CACHE_MINUTES'] = '5'; - -const PORT = process.env['PORT'] ?? 3000; -const CACHE_MINUTES = process.env['CACHE_MINUTES'] ?? 10; -const CACHE_SIZE = process.env['CACHE_SIZE'] ?? 0.5; - -const cache = new Map< - string, - { - lastFetched: number; - statusCode: number; - headers: IncomingHttpHeaders; - data: Buffer; - } ->(); -const maxCacheSize = 1024 * 1024 * 1024 * Number(CACHE_SIZE); -let cacheSize = 0; -const cacheLifetime = 1000 * 60 * Number(CACHE_MINUTES); -const proxyHostname = 'launcher.orionzleon.me'; -const requestCounter = new Map(); - -const app = express(); - -app.use(morgan(':method :url :status - :response-time ms')); - -app.use((req, res) => { - if (req.method === 'GET' && cache.has(req.url)) { - const cached = cache.get(req.url); - if (cached && Date.now() - cached.lastFetched < cacheLifetime) { - requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1); - res.writeHead(cached.statusCode, cached.headers).end(cached.data); - } - } else { - const proxyReq = https.request( - { - hostname: proxyHostname, - path: req.url, - method: req.method, - }, - (proxyRes) => { - const statusCode = proxyRes.statusCode ?? 500; - const headers = proxyRes.headers; - - const responseChunks: Buffer[] = []; - - proxyRes.on('data', (chunk) => responseChunks.push(chunk)); - - proxyRes.on('end', () => { - const responseData = Buffer.concat(responseChunks); - - if (req.method === 'GET') { - cache.set(req.url, { - lastFetched: Date.now(), - statusCode: statusCode, - headers: headers, - data: responseData, - }); - - requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1); - - cacheSize += responseData.length; - if (cacheSize > maxCacheSize) { - const keys = Array.from(cache.keys()); - keys.sort( - (a, b) => - (requestCounter.get(a) ?? 0) - (requestCounter.get(b) ?? 0), - ); - while (cacheSize > maxCacheSize && keys.length > 0) { - const key = keys.shift(); - if (key) { - const cached = cache.get(key); - if (cached) { - cacheSize -= cached.data.length; - cache.delete(key); - } - } - } - } - } - - res.writeHead(statusCode, headers).end(responseData); - }); - }, - ); - - proxyReq.on('error', () => { - if (req.method === 'GET' && cache.has(req.url)) { - const cached = cache.get(req.url); - if (cached) { - requestCounter.set(req.url, (requestCounter.get(req.url) ?? 0) + 1); - res.writeHead(cached.statusCode, cached.headers).end(cached.data); - } - } else - res - .writeHead(500, { 'Content-Type': 'text/plain' }) - .end('500 Internal Server Error'); - }); - - proxyReq.end(); - } -}); - -app.listen(PORT, () => - console.log( - `Server running on http://localhost:${PORT}/\n\nConfiguration:\n Maximum memory usage: ${CACHE_SIZE} GiB\n Cache TTL: ${CACHE_MINUTES} minutes`, - ), -);