import ImageProxy from '@server/lib/imageproxy'; import logger from '@server/logger'; import { Router } from 'express'; const router = Router(); const tmdbImageProxy = new ImageProxy('tmdb', 'https://image.tmdb.org', { rateLimitOptions: { maxRequests: 20, maxRPS: 50, }, }); /** * Image Proxy */ router.get('/*', async (req, res) => { const imagePath = req.path.replace('/image', ''); try { const imageData = await tmdbImageProxy.getImage(imagePath); res.writeHead(200, { 'Content-Type': `image/${imageData.meta.extension}`, 'Content-Length': imageData.imageBuffer.length, 'Cache-Control': `public, max-age=${imageData.meta.curRevalidate}`, 'OS-Cache-Key': imageData.meta.cacheKey, 'OS-Cache-Status': imageData.meta.cacheMiss ? 'MISS' : 'HIT', }); res.end(imageData.imageBuffer); } catch (e) { logger.error('Failed to proxy image', { imagePath, errorMessage: e.message, }); res.status(500).send(); } }); export default router;