import type { Express, RequestHandler } from "express"; import http from "node:http"; import https from "node:https"; function createMediaProxy(targetUrl: string): RequestHandler { const target = new URL(targetUrl); const transport = target.protocol === "https:" ? https : http; return (req, res) => { const upstreamUrl = new URL(req.originalUrl, target); const proxyRequest = transport.request( upstreamUrl, { method: req.method, headers: { ...req.headers, host: target.host, connection: "keep-alive", }, }, (proxyResponse) => { if (proxyResponse.statusCode) { res.status(proxyResponse.statusCode); } Object.entries(proxyResponse.headers).forEach(([key, value]) => { if (value !== undefined) { res.setHeader(key, value); } }); proxyResponse.pipe(res); } ); proxyRequest.on("error", (error) => { if (!res.headersSent) { res.status(502).json({ error: "media_service_unavailable", message: error.message, }); } else { res.end(); } }); req.pipe(proxyRequest); }; } export function registerMediaProxy(app: Express) { const mediaServiceUrl = process.env.MEDIA_SERVICE_URL; if (!mediaServiceUrl) { return; } app.use("/media", createMediaProxy(mediaServiceUrl)); }