/**
 * IndexedDB-backed store for history-entry photos.
 *
 * History entry metadata (sizing result, picked sizes, product info) lives in
 * localStorage — small, JSON-serializable. The user's *photo* is binary and
 * would blow the 5–10 MB localStorage quota at 50 entries; IndexedDB has no
 * such practical limit.
 *
 * Each photo is stored as a `Blob` keyed by the history entry's `id`. When
 * a history entry is deleted, call `deletePhoto(id)` to free the row.
 */
/** Save a photo Blob keyed by historyEntryId. Replaces if exists. */
export declare function savePhoto(id: string, blob: Blob): Promise<boolean>;
/** Load a photo Blob by historyEntryId, or null if not stored. */
export declare function getPhoto(id: string): Promise<Blob | null>;
/** Delete a photo by historyEntryId. */
export declare function deletePhoto(id: string): Promise<boolean>;
/** Save a try-on result Blob keyed by historyEntryId. Replaces if exists. */
export declare function saveResult(id: string, blob: Blob): Promise<boolean>;
/** Load a try-on result Blob by historyEntryId, or null if not stored. */
export declare function getResult(id: string): Promise<Blob | null>;
/** Garbage-collect: keep only photos (and results) whose id is in `keepIds`.
 *  Uses a value cursor (openCursor) so records can be deleted during
 *  iteration — openKeyCursor's cursor.delete() throws InvalidStateError. */
export declare function pruneToIds(keepIds: Set<string>): Promise<void>;
