import type { Database } from "sqlite3";
import Msg, { Message } from "../../models/msg";
import Client from "../../client";
import Chan, { Channel } from "../../models/chan";
import type { SearchResponse, SearchQuery, SqliteMessageStorage as ISqliteMessageStorage } from "./types";
import Network from "../../models/network";
declare class Deferred {
    resolve: () => void;
    promise: Promise<void>;
    constructor();
}
declare class SqliteMessageStorage implements ISqliteMessageStorage {
    client: Client;
    isEnabled: boolean;
    database: Database;
    initDone: Deferred;
    constructor(client: Client);
    _enable(): Promise<void>;
    enable(): Promise<void>;
    run_migrations(): Promise<void>;
    close(): Promise<void>;
    index(network: Network, channel: Chan, msg: Msg): Promise<void>;
    deleteChannel(network: Network, channel: Channel): Promise<void>;
    /**
     * Load messages for given channel on a given network and resolve a promise with loaded messages.
     *
     * @param network Network - Network object where the channel is
     * @param channel Channel - Channel object for which to load messages for
     */
    getMessages(network: Network, channel: Channel): Promise<Message[]>;
    search(query: SearchQuery): Promise<SearchResponse>;
    canProvideMessages(): boolean;
    private serialize_run;
    private serialize_fetchall;
    private serialize_get;
}
export default SqliteMessageStorage;
