import { Storage } from "@plasmohq/storage" const storage = new Storage() const TOTAL_SEARCH_RESULTS = 2 const DEFAULT_PROVIDER = "google" const AVAILABLE_PROVIDERS = ["google", "duckduckgo"] as const export const getIsSimpleInternetSearch = async () => { const isSimpleInternetSearch = await storage.get("isSimpleInternetSearch") if (!isSimpleInternetSearch || isSimpleInternetSearch.length === 0) { return true } return isSimpleInternetSearch === "true" } export const getIsVisitSpecificWebsite = async () => { const isVisitSpecificWebsite = await storage.get("isVisitSpecificWebsite") if (!isVisitSpecificWebsite || isVisitSpecificWebsite.length === 0) { return true } return isVisitSpecificWebsite === "true" } export const setIsVisitSpecificWebsite = async ( isVisitSpecificWebsite: boolean ) => { await storage.set("isVisitSpecificWebsite", isVisitSpecificWebsite.toString()) } export const setIsSimpleInternetSearch = async ( isSimpleInternetSearch: boolean ) => { await storage.set("isSimpleInternetSearch", isSimpleInternetSearch.toString()) } export const getSearchProvider = async (): Promise< (typeof AVAILABLE_PROVIDERS)[number] > => { const searchProvider = await storage.get("searchProvider") if (!searchProvider || searchProvider.length === 0) { return DEFAULT_PROVIDER } return searchProvider as (typeof AVAILABLE_PROVIDERS)[number] } export const setSearchProvider = async (searchProvider: string) => { await storage.set("searchProvider", searchProvider) } export const totalSearchResults = async () => { const totalSearchResults = await storage.get("totalSearchResults") if (!totalSearchResults || totalSearchResults.length === 0) { return TOTAL_SEARCH_RESULTS } return parseInt(totalSearchResults) } export const setTotalSearchResults = async (totalSearchResults: number) => { await storage.set("totalSearchResults", totalSearchResults.toString()) } export const getSearxngURL = async () => { const searxngURL = await storage.get("searxngURL") return searxngURL || "" } export const isSearxngJSONMode = async () => { const searxngJSONMode = await storage.get("searxngJSONMode") return searxngJSONMode ?? false } export const setSearxngJSONMode = async (searxngJSONMode: boolean) => { await storage.set("searxngJSONMode", searxngJSONMode) } export const setSearxngURL = async (searxngURL: string) => { await storage.set("searxngURL", searxngURL) } export const getSearchSettings = async () => { const [isSimpleInternetSearch, searchProvider, totalSearchResult, visitSpecificWebsite, searxngURL, searxngJSONMode ] = await Promise.all([ getIsSimpleInternetSearch(), getSearchProvider(), totalSearchResults(), getIsVisitSpecificWebsite(), getSearxngURL(), isSearxngJSONMode() ]) return { isSimpleInternetSearch, searchProvider, totalSearchResults: totalSearchResult, visitSpecificWebsite, searxngURL, searxngJSONMode } } export const setSearchSettings = async ({ isSimpleInternetSearch, searchProvider, totalSearchResults, visitSpecificWebsite, searxngJSONMode, searxngURL }: { isSimpleInternetSearch: boolean searchProvider: string totalSearchResults: number visitSpecificWebsite: boolean searxngURL: string searxngJSONMode: boolean }) => { await Promise.all([ setIsSimpleInternetSearch(isSimpleInternetSearch), setSearchProvider(searchProvider), setTotalSearchResults(totalSearchResults), setIsVisitSpecificWebsite(visitSpecificWebsite), setSearxngJSONMode(searxngJSONMode), setSearxngURL(searxngURL) ]) }