11import * as v from 'valibot'
2+ import { hash } from 'ohash'
23import { createError , getRouterParam , getQuery , setHeader } from 'h3'
34import { PackageRouteParamsSchema } from '#shared/schemas/package'
45import { CACHE_MAX_AGE_ONE_HOUR , ERROR_NPM_FETCH_FAILED } from '#shared/utils/constants'
@@ -11,11 +12,13 @@ const OSV_QUERY_API = 'https://api.osv.dev/v1/query'
1112const BUNDLEPHOBIA_API = 'https://bundlephobia.com/api/size'
1213const NPMS_API = 'https://api.npms.io/v2/package'
1314
15+ const SafeStringSchema = v . pipe ( v . string ( ) , v . regex ( / ^ [ ^ < > " & ] * $ / , 'Invalid characters' ) )
16+
1417const QUERY_SCHEMA = v . object ( {
15- color : v . optional ( v . string ( ) ) ,
18+ color : v . optional ( SafeStringSchema ) ,
1619 name : v . optional ( v . string ( ) ) ,
17- labelColor : v . optional ( v . string ( ) ) ,
18- label : v . optional ( v . string ( ) ) ,
20+ labelColor : v . optional ( SafeStringSchema ) ,
21+ label : v . optional ( SafeStringSchema ) ,
1922} )
2023
2124const COLORS = {
@@ -338,7 +341,7 @@ export default defineCachedEventHandler(
338341 const type = getRouterParam ( event , 'type' ) ?? 'version'
339342 const pkg = getRouterParam ( event , 'pkg' ) ?? ''
340343 const query = getQuery ( event )
341- return `badge:${ type } :${ pkg } :${ JSON . stringify ( query ) } `
344+ return `badge:${ type } :${ pkg } :${ hash ( query ) } `
342345 } ,
343346 } ,
344347)
0 commit comments