diff --git a/materialious/src/lib/fetchProxy.ts b/materialious/src/lib/fetchProxy.ts index 3932e6aa..a2a3c611 100644 --- a/materialious/src/lib/fetchProxy.ts +++ b/materialious/src/lib/fetchProxy.ts @@ -42,13 +42,9 @@ export const fetchProxied = async ( const nonProxiedUrl = requestInput instanceof Request ? requestInput.url : requestInput.toString(); - console.log('nonProxiedUrl', nonProxiedUrl); - if (needsProxying(nonProxiedUrl)) { const proxiedUrl = corsProxyUrl + encodeUrl(nonProxiedUrl); - console.log('proxiedUrl', proxiedUrl); - if (requestInput instanceof Request) { requestInput = new Request(proxiedUrl, { method: requestInput.method, diff --git a/materialious/src/routes/api/proxy/[urlToProxy]/+server.ts b/materialious/src/routes/api/proxy/[urlToProxy]/+server.ts index cfffa0f0..8778c0ed 100644 --- a/materialious/src/routes/api/proxy/[urlToProxy]/+server.ts +++ b/materialious/src/routes/api/proxy/[urlToProxy]/+server.ts @@ -1,6 +1,9 @@ import { isOwnBackend } from '$lib/shared'; import { env } from '$env/dynamic/public'; import { env as privateEnv } from '$env/dynamic/private'; +import { Agent } from 'undici'; +import fs from 'fs'; +import tls from 'tls'; import { error } from '@sveltejs/kit'; import { parse as tldParse } from 'tldts'; @@ -59,6 +62,19 @@ for (const dynamicDomain of dynamicAllowDomainsEnvVars) { } } +let dispatcher: Agent; + +const certPath = privateEnv.PROXY_TRUST_CA; +if (certPath && fs.existsSync(certPath)) { + dispatcher = new Agent({ + connect: { + ca: [fs.readFileSync(certPath), ...tls.rootCertificates] + } + }); +} else { + dispatcher = new Agent(); +} + async function proxyRequest( request: Request, urlToProxy: string, @@ -145,7 +161,9 @@ async function proxyRequest( response = await fetch(urlToProxyObj.toString(), { ...requestOptions, body, - signal: AbortSignal.timeout(10000) + signal: AbortSignal.timeout(10000), + // @ts-expect-error Node-specific option + dispatcher }); } catch (err) { errorMsg = (err as any).toString();