/ src / server / tools / web-search / cache.ts
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  }