27 lines
897 B
TypeScript
27 lines
897 B
TypeScript
import { defineEventHandler } from "h3";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const { req, res } = event.node;
|
|
// Preserve the path after /fonts
|
|
const forwardPath = req.url?.replace(/^\/fonts/, "") || "";
|
|
const target = `https://fontsapi.zeoseven.com${forwardPath}`;
|
|
|
|
const upstream = await fetch(target);
|
|
if (!upstream.ok) {
|
|
res.statusCode = upstream.status;
|
|
const text = await upstream.text();
|
|
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
res.end(text);
|
|
return;
|
|
}
|
|
|
|
const contentType = upstream.headers.get("content-type") || "application/octet-stream";
|
|
const arrayBuffer = await upstream.arrayBuffer();
|
|
const buffer = Buffer.from(arrayBuffer);
|
|
|
|
// Long cache: 1 year + immutable
|
|
res.setHeader("Cache-Control", "public, max-age=31536000, immutable");
|
|
res.setHeader("Content-Type", contentType);
|
|
res.end(buffer);
|
|
});
|