export abstract class IKeyValueStorage {
  public abstract getKeys(): Promise<string[]>;
  public abstract getEntries<T = any>(): Promise<[string, T][]>;
  public abstract getItem<T = any>(key: string): Promise<T | undefined>;
  public abstract setItem<T = any>(key: string, value: T): Promise<void>;
  public abstract removeItem(key: string): Promise<void>;
  
  public abstract on<T = any>("create", (key: string, value: T) => {}): void;
  public abstract on<T = any>("update", (key: string, value: T) => {}): void;
  public abstract on<T = any>("delete", (key: string, value: T) => {}): void;
  
  public abstract on("sync", () => {}): void;
}