interface Options {
    shouldPersist?: boolean;
    ttl?: number;
}
type Internal<T> = Options & {
    value: T;
};
type Signal = () => void;
export declare class KeyValueStore {
    static DEFAULTS: Options;
    private adapter;
    private subscriptions;
    constructor(adapter: Storage);
    private getInternal;
    private signal;
    get<T = null | unknown>(key: string, defaultValue?: T): T | null;
    set<T = unknown>(key: string, value: T, opts?: Options): void;
    subscribe(key: string, signal: Signal): () => void;
    private removeSubscription;
    forEach(cb: (key: string, value: Internal<unknown>) => void): void;
    remove(key: string): void;
    clear(removeAll?: boolean): {
        [k: string]: unknown;
    };
    getSnapshot(): {
        [k: string]: unknown;
    };
}
export {};
