diff --git a/docs/run-an-instance.md b/docs/run-an-instance.md index 1faafb91..d31a67f5 100644 --- a/docs/run-an-instance.md +++ b/docs/run-an-instance.md @@ -56,6 +56,7 @@ sudo service nscd start | `API_LISTEN_ADDRESS` | `0.0.0.0` | `127.0.0.1` | changes address from which api server is accessible. **if you are using docker, you usually don't need to configure this.** | | `API_URL` | ➖ | `https://api.cobalt.tools/` | changes url from which api server is accessible.
***REQUIRED TO RUN THE API***. | | `API_NAME` | `unknown` | `ams-1` | api server name that is shown in `/api/serverInfo`. | +| `API_EXTERNAL_PROXY` | ➖ | `http://user:password@127.0.0.1:8080`| url of the proxy that will be passed to [`ProxyAgent`](https://undici.nodejs.org/#/docs/api/ProxyAgent) and used for all external requests. HTTP(S) only. | | `CORS_WILDCARD` | `1` | `0` | toggles cross-origin resource sharing.
`0`: disabled. `1`: enabled. | | `CORS_URL` | not used | `https://cobalt.tools` | cross-origin resource sharing url. api will be available only from this url if `CORS_WILDCARD` is set to `0`. | | `COOKIE_PATH` | not used | `/cookies.json` | path for cookie file relative to main folder. | diff --git a/src/core/api.js b/src/core/api.js index aaad0887..5f4ee804 100644 --- a/src/core/api.js +++ b/src/core/api.js @@ -1,5 +1,6 @@ import cors from "cors"; import rateLimit from "express-rate-limit"; +import { setGlobalDispatcher, ProxyAgent } from "undici"; import { env, version } from "../modules/config.js"; @@ -208,6 +209,14 @@ export function runAPI(express, app, gitCommit, gitBranch, __dirname) { randomizeCiphers(); setInterval(randomizeCiphers, 1000 * 60 * 30); // shuffle ciphers every 30 minutes + if (env.externalProxy) { + if (env.freebindCIDR) { + throw new Error('Freebind is not available when external proxy is enabled') + } + + setGlobalDispatcher(new ProxyAgent(env.externalProxy)) + } + app.listen(env.apiPort, env.listenAddress, () => { console.log(`\n` + `${Cyan("cobalt")} API ${Bright(`v.${version}-${gitCommit} (${gitBranch})`)}\n` + diff --git a/src/modules/config.js b/src/modules/config.js index 530c5f0b..662d8b05 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -48,7 +48,9 @@ const processingPriority: process.platform !== 'win32' && process.env.PROCESSING_PRIORITY - && parseInt(process.env.PROCESSING_PRIORITY) + && parseInt(process.env.PROCESSING_PRIORITY), + + externalProxy: process.env.API_EXTERNAL_PROXY, } export const