import { getPublicNextURL } from "@/server/utils" import { resolve as resolveEntry } from "@/utils/entry" import { findLang } from "@/utils/languages" import { removeTrailingSlash } from "@/utils/url" import type { NextRequest } from "next/server" import type { Lang } from "@/constants/languages" export function getDefaultRequestHeaders(request: NextRequest) { const lang = findLang(request.nextUrl.pathname)! const nextUrlPublic = getPublicNextURL(request) const headers = new Headers(request.headers) headers.set("x-lang", lang) headers.set( "x-pathname", removeTrailingSlash( request.nextUrl.pathname.replace(`/${lang}`, "").replace(`/webview`, "") ) ) headers.set("x-url", removeTrailingSlash(nextUrlPublic.href)) return headers } const entryResponseCache: Map< string, { contentType: string | null uid: string | null expiresAt: number } > = new Map() let size: number = 0 export const fetchAndCacheEntry = async (path: string, lang: Lang) => { const cacheKey = `${path + lang}` const cachedResponse = entryResponseCache.get(cacheKey) if (cachedResponse && cachedResponse.expiresAt > Date.now() / 1000) { console.log("[CMS MIDDLEWARE]: CACHE HIT") return cachedResponse } if (cachedResponse && cachedResponse.expiresAt < Date.now() / 1000) { console.log("[CMS MIDDLEWARE]: CACHE STALE") size -= JSON.stringify(cachedResponse).length entryResponseCache.delete(cacheKey) } else { console.log("[CMS MIDDLEWARE]: CACHE MISS") } const { contentType, uid } = await resolveEntry(path, lang) let expiresAt = Date.now() / 1000 if (!contentType || !uid) { expiresAt += 600 } else { expiresAt += 3600 * 12 } const entryCache = { contentType, uid, expiresAt } size += JSON.stringify(entryCache).length console.log("[CMS MIDDLEWARE] Adding to cache", entryCache) console.log("[CMS MIDDLEWARE] Cache size (total)", size) entryResponseCache.set(cacheKey, entryCache) return { contentType, uid, } }