@@ -11,30 +11,42 @@ function getQueryParam(event: H3Event, key: string): string {
1111 return Array . isArray ( value ) ? String ( value [ 0 ] ?? '' ) : String ( value ?? '' )
1212}
1313
14- export default defineCachedEventHandler ( async event => {
15- const rawUsername = getQueryParam ( event , 'username' )
16- const rawSize = getQueryParam ( event , 'size' )
14+ export default defineCachedEventHandler (
15+ async event => {
16+ const rawUsername = getQueryParam ( event , 'username' )
17+ const rawSize = getQueryParam ( event , 'size' )
1718
18- try {
19- const { username, size } = v . parse ( GravatarQuerySchema , {
20- username : rawUsername ,
21- size : rawSize ? rawSize : undefined ,
22- } )
19+ try {
20+ const { username, size } = v . parse ( GravatarQuerySchema , {
21+ username : rawUsername ,
22+ size : rawSize ? rawSize : undefined ,
23+ } )
24+
25+ const dataUrl = await getGravatarFromUsername ( username , size ?? 80 )
2326
24- const dataUrl = await getGravatarFromUsername ( username , size ?? 80 )
27+ if ( ! dataUrl ) {
28+ throw createError ( {
29+ statusCode : 404 ,
30+ message : ERROR_GRAVATAR_EMAIL_UNAVAILABLE ,
31+ } )
32+ }
2533
26- if ( ! dataUrl ) {
27- throw createError ( {
28- statusCode : 404 ,
29- message : ERROR_GRAVATAR_EMAIL_UNAVAILABLE ,
34+ return { url : dataUrl }
35+ } catch ( error : unknown ) {
36+ handleApiError ( error , {
37+ statusCode : 502 ,
38+ message : ERROR_GRAVATAR_FETCH_FAILED ,
3039 } )
3140 }
32-
33- return { url : dataUrl }
34- } catch ( error : unknown ) {
35- handleApiError ( error , {
36- statusCode : 502 ,
37- message : ERROR_GRAVATAR_FETCH_FAILED ,
38- } )
39- }
40- } )
41+ } ,
42+ {
43+ maxAge : CACHE_MAX_AGE_ONE_DAY ,
44+ swr : true ,
45+ getKey : event => {
46+ const username = getQueryParam ( event , 'username' ) . trim ( ) . toLowerCase ( )
47+ const size = getQueryParam ( event , 'size' ) || '80'
48+ const defaultImg = getQueryParam ( event , 'default' ) || '404'
49+ return `gravatar:v1:${ username } :${ size } :${ defaultImg } `
50+ } ,
51+ } ,
52+ )
0 commit comments