diff --git a/nuxt.config.ts b/nuxt.config.ts index dd1700e64e..b13d14c398 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -98,6 +98,13 @@ export default defineNuxtConfig({ '/search': { isr: false, cache: false }, '/api/auth/**': { isr: false, cache: false }, '/api/social/**': { isr: false, cache: false }, + '/api/opensearch/suggestions': { + isr: { + expiration: 60 * 60 * 24 /* one day */, + passQuery: true, + allowQuery: ['q'], + }, + }, // infinite cache (versioned - doesn't change) '/package-code/**': { isr: true, cache: { maxAge: 365 * 24 * 60 * 60 } }, '/package-docs/:pkg/v/**': { isr: true, cache: { maxAge: 365 * 24 * 60 * 60 } }, diff --git a/server/api/opensearch/suggestions.get.ts b/server/api/opensearch/suggestions.get.ts index 4c7146e581..4f8c0ab1ed 100644 --- a/server/api/opensearch/suggestions.get.ts +++ b/server/api/opensearch/suggestions.get.ts @@ -1,37 +1,26 @@ import * as v from 'valibot' import { SearchQuerySchema } from '#shared/schemas/package' -import { CACHE_MAX_AGE_ONE_MINUTE, NPM_REGISTRY } from '#shared/utils/constants' +import { NPM_REGISTRY } from '#shared/utils/constants' -export default defineCachedEventHandler( - async event => { - const query = getQuery(event) +export default defineEventHandler(async event => { + const query = getQuery(event) - try { - const q = v.parse(SearchQuerySchema, query.q) + try { + const q = v.parse(SearchQuerySchema, query.q) - if (!q) { - return [q, []] - } + if (!q) { + return [q, []] + } - const params = new URLSearchParams({ text: q, size: '10' }) - const response = await $fetch(`${NPM_REGISTRY}/-/v1/search?${params}`) + const params = new URLSearchParams({ text: q, size: '10' }) + const response = await $fetch(`${NPM_REGISTRY}/-/v1/search?${params}`) - const suggestions = response.objects.map(obj => obj.package.name) - return [q, suggestions] - } catch (error: unknown) { - handleApiError(error, { - statusCode: 502, - message: ERROR_SUGGESTIONS_FETCH_FAILED, - }) - } - }, - { - maxAge: CACHE_MAX_AGE_ONE_MINUTE, - swr: true, - getKey: event => { - const query = getQuery(event) - const q = String(query.q || '').trim() - return `opensearch-suggestions:${q}` - }, - }, -) + const suggestions = response.objects.map(obj => obj.package.name) + return [q, suggestions] + } catch (error: unknown) { + handleApiError(error, { + statusCode: 502, + message: ERROR_SUGGESTIONS_FETCH_FAILED, + }) + } +})