Skip to content

Commit e65bf62

Browse files
committed
fix: caching best practices
1 parent d264b7d commit e65bf62

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

server/api/registry/downloads/[...slug].get.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { getQuery } from 'h3'
1+
import { getQuery, setHeader } from 'h3'
22
import * as v from 'valibot'
3+
import { hash } from 'ohash'
34
import type { VersionDistributionResponse } from '#shared/types'
45
import { CACHE_MAX_AGE_ONE_HOUR } from '#shared/utils/constants'
56
import { groupVersionDownloads } from '#server/utils/version-downloads'
@@ -96,6 +97,14 @@ export default defineCachedEventHandler(
9697
timestamp: new Date().toISOString(),
9798
}
9899

100+
// Set cache headers for both client and CDN/edge caching
101+
// s-maxage controls shared cache (Vercel edge) behavior
102+
setHeader(
103+
event,
104+
'Cache-Control',
105+
`public, max-age=${CACHE_MAX_AGE_ONE_HOUR}, s-maxage=${CACHE_MAX_AGE_ONE_HOUR}`,
106+
)
107+
99108
if (filterOldVersionsBool) {
100109
try {
101110
const oneYearAgo = new Date()
@@ -134,10 +143,9 @@ export default defineCachedEventHandler(
134143
getKey: event => {
135144
const slug = getRouterParam(event, 'slug') ?? ''
136145
const query = getQuery(event)
137-
const mode = query.mode || 'major'
138-
const filterThreshold = query.filterThreshold || 1
139-
const filterOldVersions = query.filterOldVersions === 'true'
140-
return `version-downloads:v3:${slug}:${mode}:${filterThreshold}:${filterOldVersions ? 'filtered' : 'all'}`
146+
// Use ohash to create deterministic cache key from query params
147+
// This ensures different param combinations = different cache entries
148+
return `version-downloads:v4:${slug}:${hash(query)}`
141149
},
142150
},
143151
)

0 commit comments

Comments
 (0)