From 46ee8a4ca13b026bd929b4027eb001cc74064bb8 Mon Sep 17 00:00:00 2001 From: Gauthier Date: Tue, 11 Jun 2024 23:56:10 +0200 Subject: [PATCH] fix(api): add DNS caching (#810) fix #387 #657 #728 --- package.json | 1 + server/index.ts | 11 +++++++++++ yarn.lock | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/package.json b/package.json index 97c025503..32b66e19d 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "axios-rate-limit": "1.3.0", "bcrypt": "5.1.0", "bowser": "2.11.0", + "cacheable-lookup": "^7.0.0", "connect-typeorm": "1.1.4", "cookie-parser": "1.4.6", "copy-to-clipboard": "3.3.3", diff --git a/server/index.ts b/server/index.ts index 477864c26..b62080778 100644 --- a/server/index.ts +++ b/server/index.ts @@ -23,6 +23,7 @@ import imageproxy from '@server/routes/imageproxy'; import { getAppVersion } from '@server/utils/appVersion'; import restartFlag from '@server/utils/restartFlag'; import { getClientIp } from '@supercharge/request-ip'; +import type CacheableLookupType from 'cacheable-lookup'; import { TypeormStore } from 'connect-typeorm/out'; import cookieParser from 'cookie-parser'; import csurf from 'csurf'; @@ -32,10 +33,14 @@ import * as OpenApiValidator from 'express-openapi-validator'; import type { Store } from 'express-session'; import session from 'express-session'; import next from 'next'; +import http from 'node:http'; +import https from 'node:https'; import path from 'path'; import swaggerUi from 'swagger-ui-express'; import YAML from 'yamljs'; +const _importDynamic = new Function('modulePath', 'return import(modulePath)'); + const API_SPEC_PATH = path.join(__dirname, '../overseerr-api.yml'); logger.info(`Starting Overseerr version ${getAppVersion()}`); @@ -46,6 +51,12 @@ const handle = app.getRequestHandler(); app .prepare() .then(async () => { + const CacheableLookup = (await _importDynamic('cacheable-lookup')) + .default as typeof CacheableLookupType; + const cacheable = new CacheableLookup(); + cacheable.install(http.globalAgent); + cacheable.install(https.globalAgent); + const dbConnection = await dataSource.initialize(); // Run migrations in production diff --git a/yarn.lock b/yarn.lock index 09b5a3ca0..b94855109 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5033,6 +5033,11 @@ cacache@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: tar "^6.1.11" unique-filename "^2.0.0" +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + cachedir@2.3.0, cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"