cache.ts
1 import { readCache, resolveCacheTtlMs, writeCache } from '@/lib/web-core' 2 import type { CacheEntry } from '@/lib/web-core' 3 import type { 4 WebSearchProvider, 5 WebSearchRequest, 6 WebSearchResponse, 7 } from '@/server/tools/web-search/types' 8 import { DEFAULT_CACHE_TTL_MINUTES } from '@/server/tools/web-search/types' 9 10 const SEARCH_CACHE = new Map<string, CacheEntry<WebSearchResponse>>() 11 12 export function buildSearchCacheKey( 13 request: WebSearchRequest, 14 provider: WebSearchProvider, 15 ): string { 16 return JSON.stringify({ 17 query: request.query, 18 provider, 19 searchType: request.searchType ?? 'web', 20 maxResults: request.maxResults ?? 10, 21 country: request.country, 22 language: request.language, 23 freshness: request.freshness, 24 }) 25 } 26 27 export function readSearchCache( 28 request: WebSearchRequest, 29 provider: WebSearchProvider, 30 ): WebSearchResponse | null { 31 const cached = readCache(SEARCH_CACHE, buildSearchCacheKey(request, provider)) 32 return cached ? cached.value : null 33 } 34 35 export function writeSearchCache( 36 request: WebSearchRequest, 37 provider: WebSearchProvider, 38 response: WebSearchResponse, 39 ): void { 40 const ttlMs = resolveCacheTtlMs( 41 request.cacheTtlMinutes, 42 DEFAULT_CACHE_TTL_MINUTES, 43 ) 44 writeCache(SEARCH_CACHE, buildSearchCacheKey(request, provider), response, ttlMs) 45 }