diff options
-rw-r--r-- | api/src/middlewares/TestClient.ts | 4 | ||||
-rw-r--r-- | api/src/routes/gateway.ts | 8 | ||||
-rw-r--r-- | api/src/util/cdn.ts | 53 | ||||
-rw-r--r-- | bundle/src/Server.ts | 16 | ||||
-rw-r--r-- | bundle/src/stats.ts | 10 | ||||
-rw-r--r-- | cdn/src/routes/avatars.ts | 3 | ||||
-rw-r--r-- | util/src/util/cdn.ts | 4 |
7 files changed, 29 insertions, 69 deletions
diff --git a/api/src/middlewares/TestClient.ts b/api/src/middlewares/TestClient.ts index 79f8f442..7db35285 100644 --- a/api/src/middlewares/TestClient.ts +++ b/api/src/middlewares/TestClient.ts @@ -9,11 +9,11 @@ export default function TestClient(app: Application) { const indexHTML = fs.readFileSync(path.join(__dirname, "..", "..", "client_test", "index.html"), { encoding: "utf8" }); var html = indexHTML; - const CDN_ENDPOINT = (Config.get().cdn.endpointClient || Config.get()?.cdn.endpoint || process.env.CDN || "").replace( + const CDN_ENDPOINT = (Config.get().cdn.endpointClient || Config.get()?.cdn.endpointPublic || process.env.CDN || "").replace( /(https?)?(:\/\/?)/g, "" ); - const GATEWAY_ENDPOINT = Config.get().gateway.endpointClient || Config.get()?.gateway.endpoint || process.env.GATEWAY || ""; + const GATEWAY_ENDPOINT = Config.get().gateway.endpointClient || Config.get()?.gateway.endpointPublic || process.env.GATEWAY || ""; if (CDN_ENDPOINT) { html = html.replace(/CDN_HOST: .+/, `CDN_HOST: \`${CDN_ENDPOINT}\`,`); diff --git a/api/src/routes/gateway.ts b/api/src/routes/gateway.ts index 88d9dfda..4b3a0ea6 100644 --- a/api/src/routes/gateway.ts +++ b/api/src/routes/gateway.ts @@ -5,14 +5,14 @@ import { route } from "@fosscord/api"; const router = Router(); router.get("/", route({}), (req: Request, res: Response) => { - const { endpoint } = Config.get().gateway; - res.json({ url: endpoint || process.env.GATEWAY || "ws://localhost:3002" }); + const { endpointPublic } = Config.get().gateway; + res.json({ url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002" }); }); router.get("/bot", route({}), (req: Request, res: Response) => { - const { endpoint } = Config.get().gateway; + const { endpointPublic } = Config.get().gateway; res.json({ - url: endpoint || process.env.GATEWAY || "ws://localhost:3002", + url: endpointPublic || process.env.GATEWAY || "ws://localhost:3002", shards: 1, session_start_limit: { total: 1000, diff --git a/api/src/util/cdn.ts b/api/src/util/cdn.ts deleted file mode 100644 index 8c6e9ac9..00000000 --- a/api/src/util/cdn.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Config } from "@fosscord/util"; -import FormData from "form-data"; -import { HTTPError } from "lambert-server"; -import fetch from "node-fetch"; - -export async function uploadFile(path: string, file: Express.Multer.File) { - const form = new FormData(); - form.append("file", file.buffer, { - contentType: file.mimetype, - filename: file.originalname - }); - - const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { - headers: { - signature: Config.get().security.requestSignature, - ...form.getHeaders() - }, - method: "POST", - body: form - }); - const result = await response.json(); - - if (response.status !== 200) throw result; - return result; -} - -export async function handleFile(path: string, body?: string): Promise<string | undefined> { - if (!body || !body.startsWith("data:")) return body; - try { - const mimetype = body.split(":")[1].split(";")[0]; - const buffer = Buffer.from(body.split(",")[1], "base64"); - - // @ts-ignore - const { id } = await uploadFile(path, { buffer, mimetype, originalname: "banner" }); - return id; - } catch (error) { - console.error(error); - throw new HTTPError("Invalid " + path); - } -} - -export async function deleteFile(path: string) { - const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { - headers: { - signature: Config.get().security.requestSignature - }, - method: "DELETE" - }); - const result = await response.json(); - - if (response.status !== 200) throw result; - return result; -} diff --git a/bundle/src/Server.ts b/bundle/src/Server.ts index 56c82cd1..62764e8e 100644 --- a/bundle/src/Server.ts +++ b/bundle/src/Server.ts @@ -24,16 +24,24 @@ const gateway = new GatewayServer({ server, port, production }); async function main() { await initDatabase(); await Config.init(); + // only set endpointPublic, if not already set await Config.set({ cdn: { endpointClient: "${location.host}", - endpoint: `http://localhost:${port}`, + endpointPrivate: `http://localhost:${port}`, + ...(!Config.get().cdn.endpointPublic && { + endpointPublic: `http://localhost:${port}`, + }), }, gateway: { - endpointClient: '${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}', - endpoint: `ws://localhost:${port}`, + endpointClient: + '${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}', + endpointPrivate: `ws://localhost:${port}`, + ...(!Config.get().gateway.endpointPublic && { + endpointPublic: `http://localhost:${port}`, + }), }, - }); + } as any); await Promise.all([api.start(), cdn.start(), gateway.start()]); console.log(`[Server] listening on port ${port}`); diff --git a/bundle/src/stats.ts b/bundle/src/stats.ts index 37ddb4e2..e6941db2 100644 --- a/bundle/src/stats.ts +++ b/bundle/src/stats.ts @@ -9,16 +9,20 @@ export function initStats() { console.log(`[Process] running with pid: ${process.pid}`); setInterval(async () => { - const [cpuUsed, memory, network] = await Promise.all([osu.cpu.usage(), osu.mem.info(), osu.netstat.inOut()]); + const [cpuUsed, memory, network] = await Promise.all([ + osu.cpu.usage(), + osu.mem.info(), + osu.netstat.inOut(), + ]); var networkUsage = ""; if (typeof network === "object") { networkUsage = `| [Network]: in ${network.total.inputMb}mb | out ${network.total.outputMb}mb`; } console.log( - `[CPU] ${cpuUsed.toFixed(2)}% | [Memory] ${Math.round( + `[CPU] ${cpuUsed.toPrecision(3)}% | [Memory] ${Math.round( process.memoryUsage().rss / 1024 / 1024 )}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}` ); - }, 1000 * 30); + }, 1000 * 5); } diff --git a/cdn/src/routes/avatars.ts b/cdn/src/routes/avatars.ts index 3d745f90..93045925 100644 --- a/cdn/src/routes/avatars.ts +++ b/cdn/src/routes/avatars.ts @@ -44,7 +44,8 @@ router.post( if (ANIMATED_MIME_TYPES.includes(type.mime)) hash = `a_${hash}`; // animated icons have a_ infront of the hash const path = `avatars/${user_id}/${hash}`; - const endpoint = Config.get().cdn.endpoint || "http://localhost:3003"; + const endpoint = + Config.get().cdn.endpointPublic || "http://localhost:3003"; await storage.set(path, buffer); diff --git a/util/src/util/cdn.ts b/util/src/util/cdn.ts index 754d6244..2de23f5d 100644 --- a/util/src/util/cdn.ts +++ b/util/src/util/cdn.ts @@ -11,7 +11,7 @@ export async function uploadFile(path: string, file: Express.Multer.File) { filename: file.originalname, }); - const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { + const response = await fetch(`${Config.get().cdn.endpointPrivate || "http://localhost:3003"}${path}`, { headers: { signature: Config.get().security.requestSignature, ...form.getHeaders(), @@ -41,7 +41,7 @@ export async function handleFile(path: string, body?: string): Promise<string | } export async function deleteFile(path: string) { - const response = await fetch(`${Config.get().cdn.endpoint || "http://localhost:3003"}${path}`, { + const response = await fetch(`${Config.get().cdn.endpointPrivate || "http://localhost:3003"}${path}`, { headers: { signature: Config.get().security.requestSignature, }, |