File size: 903 Bytes
a7634ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { convert as convertHtmlToPlainText } from "html-to-text";

export type SearchResults = [title: string, snippet: string, url: string][];

export async function search(query: string, limit?: number) {
  const searchUrl = new URL("/search", self.location.origin);

  searchUrl.searchParams.set("q", query);
  searchUrl.searchParams.set("token", VITE_SEARCH_TOKEN);

  if (limit && limit > 0) {
    searchUrl.searchParams.set("limit", limit.toString());
  }

  const response = await fetch(searchUrl.toString());

  if (!response.ok) return [];

  const searchResults = (await response.json()) as SearchResults;

  const cleanedSearchResults = searchResults.map(([title, snippet, url]) => [
    convertHtmlToPlainText(title, { wordwrap: false }),
    convertHtmlToPlainText(snippet, { wordwrap: false }),
    url,
  ]) as SearchResults;

  return cleanedSearchResults;
}