@aztec/kv-store 0.47.1 → 0.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,8 +47,16 @@ export interface AztecKVStore {
47
47
  */
48
48
  transaction<T extends Exclude<any, Promise<any>>>(callback: () => T): Promise<T>;
49
49
  /**
50
- * Clears the store
50
+ * Clears all entries in the store
51
51
  */
52
52
  clear(): Promise<void>;
53
+ /**
54
+ * Forks the store.
55
+ */
56
+ fork(): Promise<AztecKVStore>;
57
+ /**
58
+ * Deletes the store
59
+ */
60
+ delete(): Promise<void>;
53
61
  }
54
62
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/interfaces/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1C;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAE1D;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB"}
@@ -10,7 +10,9 @@ import { type AztecKVStore } from '../interfaces/store.js';
10
10
  */
11
11
  export declare class AztecLmdbStore implements AztecKVStore {
12
12
  #private;
13
- constructor(rootDb: RootDatabase);
13
+ readonly isEphemeral: boolean;
14
+ private path?;
15
+ constructor(rootDb: RootDatabase, isEphemeral: boolean, path?: string | undefined);
14
16
  /**
15
17
  * Creates a new AztecKVStore backed by LMDB. The path to the database is optional. If not provided,
16
18
  * the database will be stored in a temporary location and be deleted when the process exists.
@@ -25,6 +27,11 @@ export declare class AztecLmdbStore implements AztecKVStore {
25
27
  * @returns The store
26
28
  */
27
29
  static open(path?: string, ephemeral?: boolean, log?: import("@aztec/foundation/log").Logger): AztecLmdbStore;
30
+ /**
31
+ * Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
32
+ * @returns A new AztecLmdbStore.
33
+ */
34
+ fork(): Promise<AztecLmdbStore>;
28
35
  /**
29
36
  * Creates a new AztecMap in the store.
30
37
  * @param name - Name of the map
@@ -63,8 +70,10 @@ export declare class AztecLmdbStore implements AztecKVStore {
63
70
  */
64
71
  transaction<T>(callback: () => T): Promise<T>;
65
72
  /**
66
- * Clears the store
73
+ * Clears all entries in the store
67
74
  */
68
75
  clear(): Promise<void>;
76
+ /** Deletes this store */
77
+ delete(): Promise<void>;
69
78
  }
70
79
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAExE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;;gBAKrC,MAAM,EAAE,YAAY;IAgBhC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IASjB;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAInE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI7D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI9F;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAIjD;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACG,KAAK;CAGZ"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lmdb/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,YAAY,EAAQ,MAAM,MAAM,CAAC;AAIxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;;aAMC,WAAW,EAAE,OAAO;IAAE,OAAO,CAAC,IAAI,CAAC;gBAAzE,MAAM,EAAE,YAAY,EAAkB,WAAW,EAAE,OAAO,EAAU,IAAI,CAAC,oBAAQ;IAgB7F;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,GAAE,OAAe,EAC1B,GAAG,yCAA2C,GAC7C,cAAc;IAMjB;;;OAGG;IACG,IAAI;IAYV;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAInE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI7D;;;;OAIG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7E,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;IAI9F;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAIjD;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACG,KAAK;IAIX,yBAAyB;IACnB,MAAM;CAGb"}
@@ -1,7 +1,10 @@
1
- var _AztecLmdbStore_rootDb, _AztecLmdbStore_data, _AztecLmdbStore_multiMapData;
1
+ var _AztecLmdbStore_rootDb, _AztecLmdbStore_data, _AztecLmdbStore_multiMapData, _AztecLmdbStore_log;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { mkdtemp } from 'fs/promises';
4
5
  import { open } from 'lmdb';
6
+ import { tmpdir } from 'os';
7
+ import { dirname, join } from 'path';
5
8
  import { LmdbAztecArray } from './array.js';
6
9
  import { LmdbAztecCounter } from './counter.js';
7
10
  import { LmdbAztecMap } from './map.js';
@@ -11,10 +14,13 @@ import { LmdbAztecSingleton } from './singleton.js';
11
14
  * A key-value store backed by LMDB.
12
15
  */
13
16
  export class AztecLmdbStore {
14
- constructor(rootDb) {
17
+ constructor(rootDb, isEphemeral, path) {
18
+ this.isEphemeral = isEphemeral;
19
+ this.path = path;
15
20
  _AztecLmdbStore_rootDb.set(this, void 0);
16
21
  _AztecLmdbStore_data.set(this, void 0);
17
22
  _AztecLmdbStore_multiMapData.set(this, void 0);
23
+ _AztecLmdbStore_log.set(this, createDebugLogger('aztec:kv-store:lmdb'));
18
24
  __classPrivateFieldSet(this, _AztecLmdbStore_rootDb, rootDb, "f");
19
25
  // big bucket to store all the data
20
26
  __classPrivateFieldSet(this, _AztecLmdbStore_data, rootDb.openDB('data', {
@@ -41,12 +47,23 @@ export class AztecLmdbStore {
41
47
  * @returns The store
42
48
  */
43
49
  static open(path, ephemeral = false, log = createDebugLogger('aztec:kv-store:lmdb')) {
44
- log.info(`Opening LMDB database at ${path || 'temporary location'}`);
45
- const rootDb = open({
46
- path,
47
- noSync: ephemeral,
48
- });
49
- return new AztecLmdbStore(rootDb);
50
+ log.verbose(`Opening LMDB database at ${path || 'temporary location'}`);
51
+ const rootDb = open({ path, noSync: ephemeral });
52
+ return new AztecLmdbStore(rootDb, ephemeral, path);
53
+ }
54
+ /**
55
+ * Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
56
+ * @returns A new AztecLmdbStore.
57
+ */
58
+ async fork() {
59
+ const baseDir = this.path ? dirname(this.path) : tmpdir();
60
+ __classPrivateFieldGet(this, _AztecLmdbStore_log, "f").debug(`Forking store with basedir ${baseDir}`);
61
+ const forkPath = (await mkdtemp(join(baseDir, 'aztec-store-fork-'))) + (this.isEphemeral || !this.path ? '/data.mdb' : '');
62
+ __classPrivateFieldGet(this, _AztecLmdbStore_log, "f").verbose(`Forking store to ${forkPath}`);
63
+ await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").backup(forkPath, false);
64
+ const forkDb = open(forkPath, { noSync: this.isEphemeral });
65
+ __classPrivateFieldGet(this, _AztecLmdbStore_log, "f").debug(`Forked store at ${forkPath} opened successfully`);
66
+ return new AztecLmdbStore(forkDb, this.isEphemeral, forkPath);
50
67
  }
51
68
  /**
52
69
  * Creates a new AztecMap in the store.
@@ -100,11 +117,15 @@ export class AztecLmdbStore {
100
117
  return __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").transaction(callback);
101
118
  }
102
119
  /**
103
- * Clears the store
120
+ * Clears all entries in the store
104
121
  */
105
122
  async clear() {
106
123
  await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").clearAsync();
107
124
  }
125
+ /** Deletes this store */
126
+ async delete() {
127
+ await __classPrivateFieldGet(this, _AztecLmdbStore_rootDb, "f").drop();
128
+ }
108
129
  }
109
- _AztecLmdbStore_rootDb = new WeakMap(), _AztecLmdbStore_data = new WeakMap(), _AztecLmdbStore_multiMapData = new WeakMap();
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBOEMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRDs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBS3pCLFlBQVksTUFBb0I7UUFKaEMseUNBQXNCO1FBQ3RCLHVDQUE4QjtRQUM5QiwrQ0FBc0M7UUFHcEMsdUJBQUEsSUFBSSwwQkFBVyxNQUFNLE1BQUEsQ0FBQztRQUV0QixtQ0FBbUM7UUFDbkMsdUJBQUEsSUFBSSx3QkFBUyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxRQUFRLEVBQUUsU0FBUztZQUNuQixXQUFXLEVBQUUsZ0JBQWdCO1NBQzlCLENBQUMsTUFBQSxDQUFDO1FBRUgsdUJBQUEsSUFBSSxnQ0FBaUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDbEQsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxNQUFBLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FDVCxJQUFhLEVBQ2IsWUFBcUIsS0FBSyxFQUMxQixHQUFHLEdBQUcsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFFOUMsR0FBRyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSTtZQUNKLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQStCLElBQVk7UUFDaEQsT0FBTyxJQUFJLFlBQVksQ0FBQyx1QkFBQSxJQUFJLDRCQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQTRCLElBQVk7UUFDN0MsT0FBTyxJQUFJLFlBQVksQ0FBQyx1QkFBQSxJQUFJLDRCQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQStCLElBQVk7UUFDckQsT0FBTyxJQUFJLFlBQVksQ0FBQyx1QkFBQSxJQUFJLG9DQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FBcUQsSUFBWTtRQUMxRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSw0QkFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFJLElBQVk7UUFDdkIsT0FBTyxJQUFJLGNBQWMsQ0FBQyx1QkFBQSxJQUFJLDRCQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUksSUFBWTtRQUMzQixPQUFPLElBQUksa0JBQWtCLENBQUMsdUJBQUEsSUFBSSw0QkFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFJLFFBQWlCO1FBQzlCLE9BQU8sdUJBQUEsSUFBSSw4QkFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sdUJBQUEsSUFBSSw4QkFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FDRiJ9
130
+ _AztecLmdbStore_rootDb = new WeakMap(), _AztecLmdbStore_data = new WeakMap(), _AztecLmdbStore_multiMapData = new WeakMap(), _AztecLmdbStore_log = new WeakMap();
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG1kYi9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUE4QyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVFyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQU16QixZQUFZLE1BQW9CLEVBQWtCLFdBQW9CLEVBQVUsSUFBYTtRQUEzQyxnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUFVLFNBQUksR0FBSixJQUFJLENBQVM7UUFMN0YseUNBQXNCO1FBQ3RCLHVDQUE4QjtRQUM5QiwrQ0FBc0M7UUFDdEMsOEJBQU8saUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUc5Qyx1QkFBQSxJQUFJLDBCQUFXLE1BQU0sTUFBQSxDQUFDO1FBRXRCLG1DQUFtQztRQUNuQyx1QkFBQSxJQUFJLHdCQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2pDLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFdBQVcsRUFBRSxnQkFBZ0I7U0FDOUIsQ0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,EAAE,UAAU,EACzB,GAAG,GAAE,MAA4C,2BAGlD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAC7D,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,UAAU,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,YAAY,CAErE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC7C,aAAa,EAAE,UAAU,EACzB,GAAG,GAAE,MAA4C,2BASlD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,YAAY,EAC7D,KAAK,EAAE,CAAC,EACR,aAAa,EAAE,UAAU,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAe,GAAG,YAAY,CAErE"}
package/dest/utils.js CHANGED
@@ -1,7 +1,13 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
2
  import { AztecLmdbStore } from './lmdb/store.js';
3
3
  export function createStore(config, rollupAddress, log = createDebugLogger('aztec:kv-store')) {
4
- return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false, log), rollupAddress, log);
4
+ if (config.dataDirectory) {
5
+ log.info(`Using data directory: ${config.dataDirectory}`);
6
+ }
7
+ else {
8
+ log.info('Using ephemeral data directory');
9
+ }
10
+ return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false), rollupAddress, log);
5
11
  }
6
12
  /**
7
13
  * Clears the store if the rollup address does not match the one stored in the database.
@@ -11,6 +17,9 @@ export function createStore(config, rollupAddress, log = createDebugLogger('azte
11
17
  * @returns A promise that resolves when the store is cleared, or rejects if the rollup address does not match
12
18
  */
13
19
  export async function initStoreForRollup(store, rollupAddress, log) {
20
+ if (!rollupAddress) {
21
+ throw new Error('Rollup address is required');
22
+ }
14
23
  const rollupAddressValue = store.openSingleton('rollupAddress');
15
24
  const rollupAddressString = rollupAddress.toString();
16
25
  const storedRollupAddressString = rollupAddressValue.get();
@@ -29,4 +38,4 @@ export async function initStoreForRollup(store, rollupAddress, log) {
29
38
  export function openTmpStore(ephemeral = false) {
30
39
  return AztecLmdbStore.open(undefined, ephemeral);
31
40
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTZDLEVBQzdDLGFBQXlCLEVBQ3pCLE1BQWMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7SUFFakQsT0FBTyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBUSxFQUNSLGFBQXlCLEVBQ3pCLEdBQVk7SUFFWixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQXFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JELE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFM0QsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFdBQVcsSUFBSSx5QkFBeUIsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFHLEdBQUcsRUFBRSxJQUFJLENBQ1AscUNBQXFDLGFBQWEsV0FBVyxrQkFBa0IsK0JBQStCLENBQy9HLENBQUM7UUFFRixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUFxQixLQUFLO0lBQ3JELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkQsQ0FBQyJ9
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTZDLEVBQzdDLGFBQXlCLEVBQ3pCLE1BQWMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7SUFFakQsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsS0FBUSxFQUNSLGFBQXlCLEVBQ3pCLEdBQVk7SUFFWixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQXFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JELE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFM0QsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFdBQVcsSUFBSSx5QkFBeUIsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFHLEdBQUcsRUFBRSxJQUFJLENBQ1AscUNBQXFDLGFBQWEsV0FBVyxrQkFBa0IsK0JBQStCLENBQy9HLENBQUM7UUFFRixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNsRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxZQUFxQixLQUFLO0lBQ3JELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbkQsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/kv-store",
3
- "version": "0.47.1",
3
+ "version": "0.49.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/interfaces/index.js",
@@ -52,7 +52,7 @@
52
52
  ]
53
53
  },
54
54
  "dependencies": {
55
- "@aztec/foundation": "0.47.1",
55
+ "@aztec/foundation": "0.49.2",
56
56
  "lmdb": "^3.0.6"
57
57
  },
58
58
  "devDependencies": {
@@ -55,7 +55,17 @@ export interface AztecKVStore {
55
55
  transaction<T extends Exclude<any, Promise<any>>>(callback: () => T): Promise<T>;
56
56
 
57
57
  /**
58
- * Clears the store
58
+ * Clears all entries in the store
59
59
  */
60
60
  clear(): Promise<void>;
61
+
62
+ /**
63
+ * Forks the store.
64
+ */
65
+ fork(): Promise<AztecKVStore>;
66
+
67
+ /**
68
+ * Deletes the store
69
+ */
70
+ delete(): Promise<void>;
61
71
  }
package/src/lmdb/store.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { createDebugLogger } from '@aztec/foundation/log';
2
2
 
3
+ import { mkdtemp } from 'fs/promises';
3
4
  import { type Database, type Key, type RootDatabase, open } from 'lmdb';
5
+ import { tmpdir } from 'os';
6
+ import { dirname, join } from 'path';
4
7
 
5
8
  import { type AztecArray } from '../interfaces/array.js';
6
9
  import { type AztecCounter } from '../interfaces/counter.js';
@@ -21,8 +24,9 @@ export class AztecLmdbStore implements AztecKVStore {
21
24
  #rootDb: RootDatabase;
22
25
  #data: Database<unknown, Key>;
23
26
  #multiMapData: Database<unknown, Key>;
27
+ #log = createDebugLogger('aztec:kv-store:lmdb');
24
28
 
25
- constructor(rootDb: RootDatabase) {
29
+ constructor(rootDb: RootDatabase, public readonly isEphemeral: boolean, private path?: string) {
26
30
  this.#rootDb = rootDb;
27
31
 
28
32
  // big bucket to store all the data
@@ -56,12 +60,25 @@ export class AztecLmdbStore implements AztecKVStore {
56
60
  ephemeral: boolean = false,
57
61
  log = createDebugLogger('aztec:kv-store:lmdb'),
58
62
  ): AztecLmdbStore {
59
- log.info(`Opening LMDB database at ${path || 'temporary location'}`);
60
- const rootDb = open({
61
- path,
62
- noSync: ephemeral,
63
- });
64
- return new AztecLmdbStore(rootDb);
63
+ log.verbose(`Opening LMDB database at ${path || 'temporary location'}`);
64
+ const rootDb = open({ path, noSync: ephemeral });
65
+ return new AztecLmdbStore(rootDb, ephemeral, path);
66
+ }
67
+
68
+ /**
69
+ * Forks the current DB into a new DB by backing it up to a temporary location and opening a new lmdb db.
70
+ * @returns A new AztecLmdbStore.
71
+ */
72
+ async fork() {
73
+ const baseDir = this.path ? dirname(this.path) : tmpdir();
74
+ this.#log.debug(`Forking store with basedir ${baseDir}`);
75
+ const forkPath =
76
+ (await mkdtemp(join(baseDir, 'aztec-store-fork-'))) + (this.isEphemeral || !this.path ? '/data.mdb' : '');
77
+ this.#log.verbose(`Forking store to ${forkPath}`);
78
+ await this.#rootDb.backup(forkPath, false);
79
+ const forkDb = open(forkPath, { noSync: this.isEphemeral });
80
+ this.#log.debug(`Forked store at ${forkPath} opened successfully`);
81
+ return new AztecLmdbStore(forkDb, this.isEphemeral, forkPath);
65
82
  }
66
83
 
67
84
  /**
@@ -123,9 +140,14 @@ export class AztecLmdbStore implements AztecKVStore {
123
140
  }
124
141
 
125
142
  /**
126
- * Clears the store
143
+ * Clears all entries in the store
127
144
  */
128
145
  async clear() {
129
146
  await this.#rootDb.clearAsync();
130
147
  }
148
+
149
+ /** Deletes this store */
150
+ async delete() {
151
+ await this.#rootDb.drop();
152
+ }
131
153
  }
package/src/utils.ts CHANGED
@@ -9,7 +9,13 @@ export function createStore(
9
9
  rollupAddress: EthAddress,
10
10
  log: Logger = createDebugLogger('aztec:kv-store'),
11
11
  ) {
12
- return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false, log), rollupAddress, log);
12
+ if (config.dataDirectory) {
13
+ log.info(`Using data directory: ${config.dataDirectory}`);
14
+ } else {
15
+ log.info('Using ephemeral data directory');
16
+ }
17
+
18
+ return initStoreForRollup(AztecLmdbStore.open(config.dataDirectory, false), rollupAddress, log);
13
19
  }
14
20
 
15
21
  /**
@@ -24,6 +30,9 @@ export async function initStoreForRollup<T extends AztecKVStore>(
24
30
  rollupAddress: EthAddress,
25
31
  log?: Logger,
26
32
  ): Promise<T> {
33
+ if (!rollupAddress) {
34
+ throw new Error('Rollup address is required');
35
+ }
27
36
  const rollupAddressValue = store.openSingleton<ReturnType<EthAddress['toString']>>('rollupAddress');
28
37
  const rollupAddressString = rollupAddress.toString();
29
38
  const storedRollupAddressString = rollupAddressValue.get();