import axios from 'axios'; import { getGoogleApiKey, getGoogleCseId } from '../../config'; interface GooglePSESearchResult { kind: string; title: string; htmlTitle: string; link: string; displayLink: string; snippet?: string; htmlSnippet?: string; cacheId?: string; formattedUrl: string; htmlFormattedUrl: string; pagemap?: { videoobject: any; cse_thumbnail?: Array<{ src: string; width: string; height: string; }>; metatags?: Array<{ [key: string]: string; 'author'?: string; }>; cse_image?: Array<{ src: string; }>; }; fileFormat?: string; image?: { contextLink: string; thumbnailLink: string; }; mime?: string; labels?: Array<{ name: string; displayName: string; }>; } export const searchGooglePSE = async (query: string) => { try { const [googleApiKey, googleCseID] = await Promise.all([ getGoogleApiKey(), getGoogleCseId() ]); const url = new URL(`https://www.googleapis.com/customsearch/v1`); url.searchParams.append('q', query); url.searchParams.append('cx', googleCseID); url.searchParams.append('key', googleApiKey); const res = await axios.get(url.toString()); if (res.data.error) { throw new Error(`Google PSE Error: ${res.data.error.message}`); } const originalres = res.data.items; const results = originalres.map((item: GooglePSESearchResult) => ({ title: item.title, url: item.link, content: item.snippet, img_src: item.pagemap?.cse_image?.[0]?.src, })); return { results, originalres }; } catch (error) { throw new Error('Google PSE Error:', error.response?.data || error.message); } };