summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPaul Munteanu <49862892+luth31@users.noreply.github.com>2021-05-29 21:46:47 +0300
committerPaul Munteanu <49862892+luth31@users.noreply.github.com>2021-05-29 21:46:47 +0300
commita4c5cd360d27f0b7ebe848fb32f34d67416d4210 (patch)
tree6114d6e53a530ec96f0d3d3ab53ceedd09bfcab2 /src
parentCompile TS during Docker image build (diff)
parent:zap: improve asset caching (diff)
downloadserver-a4c5cd360d27f0b7ebe848fb32f34d67416d4210.tar.xz
Merge branch 'fosscord:master' into master
Diffstat (limited to 'src')
-rw-r--r--src/Server.ts33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/Server.ts b/src/Server.ts

index b1fe3c90..79a8bba3 100644 --- a/src/Server.ts +++ b/src/Server.ts
@@ -10,7 +10,7 @@ import i18nextBackend from "i18next-node-fs-backend"; import { ErrorHandler } from "./middlewares/ErrorHandler"; import { BodyParser } from "./middlewares/BodyParser"; import express, { Router } from "express"; -import fetch from "node-fetch"; +import fetch, { Response } from "node-fetch"; import mongoose from "mongoose"; import path from "path"; @@ -28,6 +28,14 @@ declare global { } } +const assetCache = new Map< + string, + { + response: Response; + buffer: Buffer; + } +>(); + export class FosscordServer extends Server { public options: FosscordServerOptions; @@ -95,13 +103,21 @@ export class FosscordServer extends Server { this.app.get("/assets/:file", async (req, res) => { delete req.headers.host; - const response = await fetch(`https://discord.com/assets/${req.params.file}`, { - // @ts-ignore - headers: { - ...req.headers - } - }); - const buffer = await response.buffer(); + var response: Response; + var buffer: Buffer; + const cache = assetCache.get(req.params.file); + if (!cache) { + response = await fetch(`https://discord.com/assets/${req.params.file}`, { + // @ts-ignore + headers: { + ...req.headers + } + }); + buffer = await response.buffer(); + } else { + response = cache.response; + buffer = cache.buffer; + } response.headers.forEach((value, name) => { if ( @@ -120,6 +136,7 @@ export class FosscordServer extends Server { } res.set(name, value); }); + assetCache.set(req.params.file, { buffer, response }); return res.send(buffer); });