import MemoryStorage from "./MemoryStorage";
import { SafeLocalStorage } from "./SafeLocalStorage";
export interface ISearch {
    query: string;
    timestamp: number;
    data?: {
        [key: string]: string;
    };
}
export declare type ScoredSearch = ISearch & {
    score: number;
};
export declare type RankingStrategy = "PROXIMITY" | "TIME" | "PROXIMITY_AND_TIME";
export interface IRecentSearchesConfig {
    ttl?: number;
    limit?: number;
    namespace?: string;
    ranking?: RankingStrategy;
}
export declare type RecentSearchesStorage = SafeLocalStorage<ISearch[]> | MemoryStorage<ISearch[]>;
export declare class RecentSearches {
    private readonly TTL;
    private readonly LIMIT;
    private readonly STORAGE;
    private readonly RANKING;
    private RECENT_SEARCHES;
    constructor(config?: IRecentSearchesConfig);
    /**
     * Retrieve recent searches for a given query.
     * If no query is passed, returns all recent searches
     *
     * @param  {string} query?
     * @returns Search[]
     */
    getRecentSearches: (query?: string | number | undefined) => ISearch[];
    /**
     * Set a recent search and data related to it.
     *
     * @param  {string} query
     * @param  {object} data?
     * @returns Search[]
     */
    setRecentSearch: (query: string | number, data?: {
        [key: string]: string;
    } | undefined) => ISearch[];
    private filterScoredResults;
    private sortScoredResults;
    private initializeStorageData;
}
export default RecentSearches;
