import { BooleanStore } from "../store/BooleanStore.js";
import { OptionalDataStore } from "../store/DataStore.js";
import type { DataKey, Database } from "../util/data.js";
import type { Item } from "../util/item.js";
import type { Stop } from "../util/start.js";
import type { MemoryProvider } from "./MemoryProvider.js";
import type { AbstractProvider } from "./Provider.js";
/** Store a single item. */
export declare class ItemStore<T extends Database, K extends DataKey<T>> extends OptionalDataStore<Item<T[K]>> {
    readonly provider: AbstractProvider<T>;
    readonly collection: K;
    readonly id: string;
    readonly busy: BooleanStore;
    /** Get the data of this store (throws `RequiredError` if item doesn't exist). */
    get data(): Item<T[K]>;
    /** Set the data of this store. */
    set data(data: T[K] | Item<T[K]>);
    constructor(collection: K, id: string, provider: AbstractProvider<T>, memory?: MemoryProvider<T>);
    /** Refresh this store from the source provider. */
    refresh(provider?: AbstractProvider<T>): void;
    private _refresh;
    /** Refresh this store if data in the cache is older than `maxAge` (in milliseconds). */
    refreshStale(maxAge: number, provider?: AbstractProvider<T>): void;
    /** Subscribe this store to a provider. */
    connect(provider?: AbstractProvider<T>): Stop;
}
