diff options
| author | adamelmore <[email protected]> | 2026-01-26 09:33:38 -0600 |
|---|---|---|
| committer | adamelmore <[email protected]> | 2026-01-26 09:33:43 -0600 |
| commit | fcea7e18a5b34e914da1b18d72e6a807e01dfd87 (patch) | |
| tree | cfd9fe6ff47d6acf3cf687ae2fb9a25f012bfadb /packages | |
| parent | 7c34319b1952cd972f47cfd09542e057c5744852 (diff) | |
| download | opencode-fcea7e18a5b34e914da1b18d72e6a807e01dfd87.tar.gz opencode-fcea7e18a5b34e914da1b18d72e6a807e01dfd87.zip | |
chore: stale-while-revalidate headers for changelog
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/console/app/src/routes/changelog.json.ts | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/packages/console/app/src/routes/changelog.json.ts b/packages/console/app/src/routes/changelog.json.ts index a23f20503..a9667ac6d 100644 --- a/packages/console/app/src/routes/changelog.json.ts +++ b/packages/console/app/src/routes/changelog.json.ts @@ -20,6 +20,9 @@ type HighlightGroup = { items: HighlightItem[] } +const ok = "public, max-age=1, s-maxage=300, stale-while-revalidate=86400, stale-if-error=86400" +const error = "public, max-age=1, s-maxage=60, stale-while-revalidate=600, stale-if-error=86400" + function parseHighlights(body: string): HighlightGroup[] { const groups = new Map<string, HighlightItem[]>() const regex = /<highlight\s+source="([^"]+)">([\s\S]*?)<\/highlight>/g @@ -90,25 +93,44 @@ export async function GET() { Accept: "application/vnd.github.v3+json", "User-Agent": "OpenCode-Console", }, - }) + cf: { + // best-effort edge caching (ignored outside Cloudflare) + cacheTtl: 60 * 5, + cacheEverything: true, + }, + } as any) if (!response.ok) { - return { releases: [] } + return new Response(JSON.stringify({ releases: [] }), { + status: 503, + headers: { + "Content-Type": "application/json", + "Cache-Control": error, + }, + }) } const releases = (await response.json()) as Release[] - return { - releases: releases.map((release) => { - const parsed = parseMarkdown(release.body || "") - return { - tag: release.tag_name, - name: release.name, - date: release.published_at, - url: release.html_url, - highlights: parsed.highlights, - sections: parsed.sections, - } + return new Response( + JSON.stringify({ + releases: releases.map((release) => { + const parsed = parseMarkdown(release.body || "") + return { + tag: release.tag_name, + name: release.name, + date: release.published_at, + url: release.html_url, + highlights: parsed.highlights, + sections: parsed.sections, + } + }), }), - } + { + headers: { + "Content-Type": "application/json", + "Cache-Control": ok, + }, + }, + ) } |
