import type { Logger } from '@aztec/foundation/log'; import type { AztecAsyncArray } from '../interfaces/array.js'; import type { Key, StoreSize, Value } from '../interfaces/common.js'; import type { AztecAsyncCounter } from '../interfaces/counter.js'; import type { AztecAsyncMap } from '../interfaces/map.js'; import type { AztecAsyncMultiMap } from '../interfaces/multi_map.js'; import type { AztecAsyncSet } from '../interfaces/set.js'; import type { AztecAsyncSingleton } from '../interfaces/singleton.js'; import type { AztecAsyncKVStore } from '../interfaces/store.js'; import type { ResultRow, SqlValue } from './messages.js'; /** * Main-thread handle for a SQLite database persisted to OPFS via the `opfs-sahpool` * VFS. Owns a dedicated Web Worker (the SAH Pool VFS requires Worker context) and * routes every SQL op through it via typed postMessage RPC. * * Transaction ordering is guaranteed by a `SerialQueue` on the main thread combined * with an `#inTx` flag: outside a `transactionAsync` block, each op acquires the * queue for its own auto-commit; inside a block, the outer call holds the queue and * nested ops bypass it to avoid deadlock. */ export declare class AztecSQLiteOPFSStore implements AztecAsyncKVStore { #private; readonly isEphemeral: boolean; private constructor(); /** * Opens (or creates) a SQLite database stored in the OPFS SAH Pool. When `ephemeral` * is true the database lives only in memory and is lost when the worker terminates. * Pass `poolDirectory` to place the SAH Pool in a non-default OPFS subdirectory — * required when multiple stores coexist in the same tab, because the SAH Pool holds * an exclusive lock on its directory. * * Pass `encryptionKey` (exactly 32 bytes) to enable at-rest encryption via sqlite3mc's * ChaCha20 page cipher. The key buffer is **transferred** to the worker — its * ArrayBuffer detaches on the caller side after `postMessage`. This is intentional: * the API encodes a one-key-one-owner invariant. A caller that wants to use the same * key for multiple stores must explicitly clone it per call (e.g. * `new Uint8Array(savedKey)`), making the duplication a visible, deliberate decision * rather than a silent structured-clone operation. The default path (one `.open()`, * one consumption of the key) leaves zero key bytes on the main thread after the call. */ static open(log: Logger, name?: string, ephemeral?: boolean, poolDirectory?: string, encryptionKey?: Uint8Array): Promise; openMap(name: string): AztecAsyncMap; openSet(name: string): AztecAsyncSet; openMultiMap(name: string): AztecAsyncMultiMap; openCounter(_name: string): AztecAsyncCounter; openArray(name: string): AztecAsyncArray; openSingleton(name: string): AztecAsyncSingleton; transactionAsync(callback: () => Promise): Promise; clear(): Promise; delete(): Promise; /** * Placeholder — returns zeros to mirror the IndexedDB backend. SQLite exposes real * numbers cheaply via `PRAGMA page_count` / `page_size` / `freelist_count` and * `SELECT COUNT(*) FROM data`, which would populate `physicalFileSize`, `actualSize`, * and `numItems` meaningfully (`mappingSize` stays 0 — it's an LMDB mmap concept). * Upgrade when any caller actually consumes these values; all current consumers * tolerate zeros. */ estimateSize(): Promise; close(): Promise; backupTo(_dstPath: string, _compact?: boolean): Promise; /** * Returns a raw SQLite image (bytes suitable for writing as a `.sqlite` file and * opening in any SQLite tool). Works only for non-ephemeral DBs because the OPFS * SAH Pool has to be initialized. Useful for inspection/debugging. */ exportDb(): Promise; /** * Runs a write statement (INSERT/UPDATE/DELETE/DDL). If called inside a * `transactionAsync` block, bypasses the queue; otherwise acquires it so the * op runs in its own auto-commit. */ runAsync(sql: string, bind?: SqlValue[]): Promise<{ changes: number; }>; /** Runs a SELECT statement and returns rows in array row-mode. */ allAsync(sql: string, bind?: SqlValue[]): Promise; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcWxpdGUtb3Bmcy9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFLeEY7Ozs7Ozs7OztHQVNHO0FBQ0gscUJBQWEsb0JBQXFCLFlBQVcsaUJBQWlCOzthQWMxQyxXQUFXLEVBQUUsT0FBTztJQUp0QyxPQUFPLGVBd0JOO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0gsT0FBYSxJQUFJLENBQ2YsR0FBRyxFQUFFLE1BQU0sRUFDWCxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQ2IsU0FBUyxHQUFFLE9BQWUsRUFDMUIsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUN0QixhQUFhLENBQUMsRUFBRSxVQUFVLEdBQ3pCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQWlDL0I7SUFFRCxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FFekU7SUFFRCxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FFckQ7SUFFRCxZQUFZLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUVuRjtJQUVELFdBQVcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBRTlEO0lBRUQsU0FBUyxDQUFDLENBQUMsU0FBUyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBRTNEO0lBRUQsYUFBYSxDQUFDLENBQUMsU0FBUyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FFbkU7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0F3QjFEO0lBRUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFM0I7SUFFSyxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQVc1QjtJQUVEOzs7Ozs7O09BT0c7SUFDSCxZQUFZLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUVqQztJQUVLLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBUzNCO0lBRUQsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUQ7SUFFRDs7OztPQUlHO0lBQ0csUUFBUSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FNcEM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUMsQ0FNckU7SUFFRCxrRUFBa0U7SUFDbEUsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBSTdEO0NBZ0RGIn0=