Files
Compass/web/lib/util/page-data.ts
MartinBraquet adef626b34 Cache build ID
2025-11-08 19:46:42 +01:00

52 lines
1.5 KiB
TypeScript

import {DEPLOYED_WEB_URL} from "common/envs/constants";
const buildIdKey = 'vercel-buildId';
export const getBuildId = async () => {
const res = await fetch(`${DEPLOYED_WEB_URL}/api/build-id`)
if (!res.ok) throw new Error('Failed to fetch build manifest')
const data = await res.json()
const buildId = data.buildId;
if (!buildId) throw new Error('No buildId found in build manifest')
localStorage.setItem(buildIdKey, buildId)
return buildId
}
export const getPageData = async (route = '/') => {
async function pull(buildId: string | undefined | null) {
if (!buildId) {
throw new Error('No buildId found')
}
const cleanRoute = route.startsWith('/') ? route.slice(1) : route
const url = `${DEPLOYED_WEB_URL}/api/proxy-data?path=${buildId}/${cleanRoute || 'index'}.json`
console.log('Fetching data from:', url)
const res = await fetch(url, {
cache: 'force-cache',
})
if (!res.ok) {
throw new Error(`Failed to fetch data for ${route}: ${res.status} ${res.statusText}`)
}
return res
}
let buildId = localStorage.getItem(buildIdKey)
if (!buildId) buildId = await getBuildId()
let res: Response
try {
res = await pull(buildId)
} catch (error: any) {
if (error?.message?.includes('404')) {
console.error('Build ID outdated, loading new one:', error.message)
buildId = await getBuildId()
res = await pull(buildId)
} else {
throw error
}
}
const result = await res.json()
console.log('Fetched Page data:', result)
return result.pageProps
}