@xyo-network/archivist 2.22.6 → 2.22.7

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.
@@ -8,7 +8,7 @@ export declare abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload
8
8
  protected account?: XyoAccount;
9
9
  constructor(parent?: XyoArchivist<T>, account?: XyoAccount);
10
10
  abstract insert(payloads: T[]): T[] | Promise<T[]>;
11
- abstract find(query: XyoPayloadFindQuery): T[] | Promise<T[]>;
11
+ abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
12
12
  abstract get(hash: string): T | Promise<T | undefined> | undefined;
13
13
  all(): T[] | Promise<T[]>;
14
14
  delete(_hash: string): boolean | Promise<boolean>;
@@ -1,11 +1,12 @@
1
1
  import { XyoPayload } from '@xyo-network/payload';
2
2
  import { XyoArchivistBase } from './XyoArchivist';
3
- import { XyoPayloadFindFilter } from './XyoPayloadFindFilter';
4
- export declare class XyoMemoryArchivist<T extends XyoPayload = XyoPayload> extends XyoArchivistBase<T> {
3
+ import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
4
+ export declare class XyoMemoryArchivist extends XyoArchivistBase<XyoPayload> {
5
5
  private cache;
6
6
  delete(hash: string): boolean | Promise<boolean>;
7
7
  clear(): void | Promise<void>;
8
- get(hash: string): T | Promise<T | undefined> | undefined;
9
- insert(payloads: T[]): T[] | Promise<T[]>;
10
- find<R extends T = T>(filter: XyoPayloadFindFilter): T[] | Promise<T[]>;
8
+ get(hash: string): XyoPayload | Promise<XyoPayload | undefined> | undefined;
9
+ insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]>;
10
+ find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
11
+ commit(): Promise<import("@xyo-network/payload").XyoPayloadBase[] | undefined>;
11
12
  }
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.XyoMemoryArchivist = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const sdk_js_1 = require("@xylabs/sdk-js");
6
+ const boundwitness_1 = require("@xyo-network/boundwitness");
5
7
  const payload_1 = require("@xyo-network/payload");
6
8
  const lru_cache_1 = tslib_1.__importDefault(require("lru-cache"));
7
9
  const XyoArchivist_1 = require("./XyoArchivist");
@@ -28,15 +30,28 @@ class XyoMemoryArchivist extends XyoArchivist_1.XyoArchivistBase {
28
30
  return payloadWithmeta;
29
31
  });
30
32
  }
31
- find(filter) {
33
+ find(query) {
32
34
  const result = [];
33
35
  this.cache.forEach((value) => {
34
- if (value.schema === filter.schema) {
36
+ if (value.schema === query.filter.schema) {
35
37
  result.push(value);
36
38
  }
37
39
  });
38
40
  return result;
39
41
  }
42
+ commit() {
43
+ var _a;
44
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
45
+ const parent = (0, sdk_js_1.assertEx)(this.parent, 'Parent is required for commit');
46
+ const account = (0, sdk_js_1.assertEx)(this.account, 'Account is required for commit');
47
+ const payloads = (0, sdk_js_1.assertEx)(yield this.all(), 'Nothing to commit');
48
+ const builder = new boundwitness_1.XyoBoundWitnessBuilder();
49
+ const block = builder.payloads(payloads).witness(account).build();
50
+ const result = yield ((_a = parent.insert) === null || _a === void 0 ? void 0 : _a.call(parent, payloads.concat([block])));
51
+ yield this.clear();
52
+ return result;
53
+ });
54
+ }
40
55
  }
41
56
  exports.XyoMemoryArchivist = XyoMemoryArchivist;
42
57
  //# sourceMappingURL=XyoMemoryArchivist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":";;;;AAAA,kDAAoE;AACpE,kEAAgC;AAEhC,iDAAiD;AAGjD,MAAa,kBAAsD,SAAQ,+BAAmB;IAA9F;;QACU,UAAK,GAAG,IAAI,mBAAQ,CAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IAgCzD,CAAC;IA9BQ,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEM,GAAG,CAAC,IAAY;;QACrB,OAAO,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,QAAa;QACzB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,2BAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,eAAe,mCAAQ,OAAO,KAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAE,CAAA;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtD,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,IAAI,CAAkB,MAA4B;QACvD,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;gBAClC,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAjCD,gDAiCC"}
1
+ {"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":";;;;AAAA,2CAAyC;AACzC,4DAAmF;AACnF,kDAAoE;AACpE,kEAAgC;AAEhC,iDAAiD;AAGjD,MAAa,kBAAmB,SAAQ,+BAA4B;IAApE;;QACU,UAAK,GAAG,IAAI,mBAAQ,CAAqB,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IA2ClE,CAAC;IAzCQ,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEM,GAAG,CAAC,IAAY;;QACrB,OAAO,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,QAAsB;QAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,2BAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,eAAe,mCAAQ,OAAO,KAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAE,CAAA;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtD,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,IAAI,CAAoC,KAA0B;QACvE,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAEY,MAAM;;;YACjB,MAAM,MAAM,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAA;YACrE,MAAM,OAAO,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAA;YACxE,MAAM,QAAQ,GAAG,IAAA,iBAAQ,EAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAA;YAChE,MAAM,OAAO,GAAG,IAAI,qCAAsB,EAA+B,CAAA;YACzE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;YACjE,MAAM,MAAM,GAAG,MAAM,CAAA,MAAA,MAAM,CAAC,MAAM,uDAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA;YAC9D,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,OAAO,MAAM,CAAA;;KACd;CACF;AA5CD,gDA4CC"}
@@ -8,7 +8,7 @@ export declare abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload
8
8
  protected account?: XyoAccount;
9
9
  constructor(parent?: XyoArchivist<T>, account?: XyoAccount);
10
10
  abstract insert(payloads: T[]): T[] | Promise<T[]>;
11
- abstract find(query: XyoPayloadFindQuery): T[] | Promise<T[]>;
11
+ abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
12
12
  abstract get(hash: string): T | Promise<T | undefined> | undefined;
13
13
  all(): T[] | Promise<T[]>;
14
14
  delete(_hash: string): boolean | Promise<boolean>;
@@ -1,11 +1,12 @@
1
1
  import { XyoPayload } from '@xyo-network/payload';
2
2
  import { XyoArchivistBase } from './XyoArchivist';
3
- import { XyoPayloadFindFilter } from './XyoPayloadFindFilter';
4
- export declare class XyoMemoryArchivist<T extends XyoPayload = XyoPayload> extends XyoArchivistBase<T> {
3
+ import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
4
+ export declare class XyoMemoryArchivist extends XyoArchivistBase<XyoPayload> {
5
5
  private cache;
6
6
  delete(hash: string): boolean | Promise<boolean>;
7
7
  clear(): void | Promise<void>;
8
- get(hash: string): T | Promise<T | undefined> | undefined;
9
- insert(payloads: T[]): T[] | Promise<T[]>;
10
- find<R extends T = T>(filter: XyoPayloadFindFilter): T[] | Promise<T[]>;
8
+ get(hash: string): XyoPayload | Promise<XyoPayload | undefined> | undefined;
9
+ insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]>;
10
+ find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
11
+ commit(): Promise<import("@xyo-network/payload").XyoPayloadBase[] | undefined>;
11
12
  }
@@ -1,3 +1,5 @@
1
+ import { assertEx } from '@xylabs/sdk-js';
2
+ import { XyoBoundWitnessBuilder } from '@xyo-network/boundwitness';
1
3
  import { XyoPayloadWrapper } from '@xyo-network/payload';
2
4
  import LruCache from 'lru-cache';
3
5
  import { XyoArchivistBase } from './XyoArchivist';
@@ -23,14 +25,24 @@ export class XyoMemoryArchivist extends XyoArchivistBase {
23
25
  return payloadWithmeta;
24
26
  });
25
27
  }
26
- find(filter) {
28
+ find(query) {
27
29
  const result = [];
28
30
  this.cache.forEach((value) => {
29
- if (value.schema === filter.schema) {
31
+ if (value.schema === query.filter.schema) {
30
32
  result.push(value);
31
33
  }
32
34
  });
33
35
  return result;
34
36
  }
37
+ async commit() {
38
+ const parent = assertEx(this.parent, 'Parent is required for commit');
39
+ const account = assertEx(this.account, 'Account is required for commit');
40
+ const payloads = assertEx(await this.all(), 'Nothing to commit');
41
+ const builder = new XyoBoundWitnessBuilder();
42
+ const block = builder.payloads(payloads).witness(account).build();
43
+ const result = await parent.insert?.(payloads.concat([block]));
44
+ await this.clear();
45
+ return result;
46
+ }
35
47
  }
36
48
  //# sourceMappingURL=XyoMemoryArchivist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGjD,MAAM,OAAO,kBAAsD,SAAQ,gBAAmB;IAA9F;;QACU,UAAK,GAAG,IAAI,QAAQ,CAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IAgCzD,CAAC;IA9BQ,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,QAAa;QACzB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtD,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,IAAI,CAAkB,MAA4B;QACvD,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;gBAClC,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAmB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACnF,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGjD,MAAM,OAAO,kBAAmB,SAAQ,gBAA4B;IAApE;;QACU,UAAK,GAAG,IAAI,QAAQ,CAAqB,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;IA2ClE,CAAC;IAzCQ,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IAEM,MAAM,CAAC,QAAsB;QAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtD,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,IAAI,CAAoC,KAA0B;QACvE,MAAM,MAAM,GAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,KAAU,CAAC,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAA;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAA;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAA+B,CAAA;QACzE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;QACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC9D,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
package/package.json CHANGED
@@ -10,10 +10,10 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@xylabs/sdk-js": "^2.6.2",
13
- "@xyo-network/account": "^2.22.6",
14
- "@xyo-network/boundwitness": "^2.22.6",
15
- "@xyo-network/core": "^2.22.6",
16
- "@xyo-network/payload": "^2.22.6",
13
+ "@xyo-network/account": "^2.22.7",
14
+ "@xyo-network/boundwitness": "^2.22.7",
15
+ "@xyo-network/core": "^2.22.7",
16
+ "@xyo-network/payload": "^2.22.7",
17
17
  "axios": "^0.27.2",
18
18
  "lru-cache": "^7.13.1",
19
19
  "pako": "^2.0.4"
@@ -56,6 +56,6 @@
56
56
  },
57
57
  "sideEffects": true,
58
58
  "types": "dist/esm/index.d.ts",
59
- "version": "2.22.6",
59
+ "version": "2.22.7",
60
60
  "packageManager": "yarn@3.1.1"
61
61
  }
@@ -15,7 +15,7 @@ export abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implem
15
15
  }
16
16
 
17
17
  abstract insert(payloads: T[]): T[] | Promise<T[]>
18
- abstract find(query: XyoPayloadFindQuery): T[] | Promise<T[]>
18
+ abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>
19
19
  abstract get(hash: string): T | Promise<T | undefined> | undefined
20
20
  public all(): T[] | Promise<T[]> {
21
21
  throw Error('getAll not supported')
@@ -1,11 +1,13 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import { XyoBoundWitness, XyoBoundWitnessBuilder } from '@xyo-network/boundwitness'
1
3
  import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
2
4
  import LruCache from 'lru-cache'
3
5
 
4
6
  import { XyoArchivistBase } from './XyoArchivist'
5
- import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
7
+ import { XyoPayloadFindQuery } from './XyoPayloadFindFilter'
6
8
 
7
- export class XyoMemoryArchivist<T extends XyoPayload = XyoPayload> extends XyoArchivistBase<T> {
8
- private cache = new LruCache<string, T>({ max: 10000 })
9
+ export class XyoMemoryArchivist extends XyoArchivistBase<XyoPayload> {
10
+ private cache = new LruCache<string, XyoPayload>({ max: 10000 })
9
11
 
10
12
  public delete(hash: string): boolean | Promise<boolean> {
11
13
  return this.cache.delete(hash)
@@ -15,11 +17,11 @@ export class XyoMemoryArchivist<T extends XyoPayload = XyoPayload> extends XyoAr
15
17
  this.cache.clear()
16
18
  }
17
19
 
18
- public get(hash: string): T | Promise<T | undefined> | undefined {
20
+ public get(hash: string): XyoPayload | Promise<XyoPayload | undefined> | undefined {
19
21
  return this.cache.get(hash) ?? this.parent?.get(hash)
20
22
  }
21
23
 
22
- public insert(payloads: T[]): T[] | Promise<T[]> {
24
+ public insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]> {
23
25
  return payloads.map((payload) => {
24
26
  const wrapper = new XyoPayloadWrapper(payload)
25
27
  const payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
@@ -28,13 +30,24 @@ export class XyoMemoryArchivist<T extends XyoPayload = XyoPayload> extends XyoAr
28
30
  })
29
31
  }
30
32
 
31
- public find<R extends T = T>(filter: XyoPayloadFindFilter): T[] | Promise<T[]> {
33
+ public find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]> {
32
34
  const result: R[] = []
33
35
  this.cache.forEach((value) => {
34
- if (value.schema === filter.schema) {
36
+ if (value.schema === query.filter.schema) {
35
37
  result.push(value as R)
36
38
  }
37
39
  })
38
40
  return result
39
41
  }
42
+
43
+ public async commit() {
44
+ const parent = assertEx(this.parent, 'Parent is required for commit')
45
+ const account = assertEx(this.account, 'Account is required for commit')
46
+ const payloads = assertEx(await this.all(), 'Nothing to commit')
47
+ const builder = new XyoBoundWitnessBuilder<XyoBoundWitness, XyoPayload>()
48
+ const block = builder.payloads(payloads).witness(account).build()
49
+ const result = await parent.insert?.(payloads.concat([block]))
50
+ await this.clear()
51
+ return result
52
+ }
40
53
  }