@xyo-network/archivist 2.22.5 → 2.22.8

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.
@@ -1,17 +1,17 @@
1
1
  import { XyoAccount } from '@xyo-network/account';
2
2
  import { XyoPayload } from '@xyo-network/payload';
3
3
  import { Archivist } from './model';
4
- import { XyoPayloadFindFilter } from './XyoPayloadFindFilter';
5
- export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindFilter>;
4
+ import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
5
+ export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>;
6
6
  export declare abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implements XyoArchivist<T> {
7
7
  protected parent?: XyoArchivist<T>;
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: XyoPayloadFindFilter): T[] | Promise<T[]>;
12
- abstract get(hash: string): T | Promise<T | undefined> | undefined;
11
+ abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
12
+ abstract get(hash: string[]): (T | null)[] | Promise<(T | null)[]>;
13
13
  all(): T[] | Promise<T[]>;
14
- delete(_hash: string): boolean | Promise<boolean>;
14
+ delete(_hashes: string[]): boolean[] | Promise<boolean[]>;
15
15
  clear(): void | Promise<void>;
16
16
  commit(): void;
17
17
  }
@@ -9,7 +9,7 @@ class XyoArchivistBase {
9
9
  all() {
10
10
  throw Error('getAll not supported');
11
11
  }
12
- delete(_hash) {
12
+ delete(_hashes) {
13
13
  throw Error('delete not supported');
14
14
  }
15
15
  clear() {
@@ -1 +1 @@
1
- {"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":";;;AAQA,MAAsB,gBAAgB;IAGpC,YAAY,MAAwB,EAAE,OAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAKM,GAAG;QACR,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,MAAM,CAAC,KAAa;QACzB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,KAAK;QACV,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IACM,MAAM;QACX,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF;AAvBD,4CAuBC"}
1
+ {"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":";;;AAQA,MAAsB,gBAAgB;IAGpC,YAAY,MAAwB,EAAE,OAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAKM,GAAG;QACR,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,MAAM,CAAC,OAAiB;QAC7B,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,KAAK;QACV,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IACM,MAAM;QACX,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF;AAvBD,4CAuBC"}
@@ -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
- delete(hash: string): boolean | Promise<boolean>;
6
+ delete(hashes: 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(hashes: string[]): Promise<(XyoPayload | null)[]>;
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");
@@ -10,15 +12,21 @@ class XyoMemoryArchivist extends XyoArchivist_1.XyoArchivistBase {
10
12
  super(...arguments);
11
13
  this.cache = new lru_cache_1.default({ max: 10000 });
12
14
  }
13
- delete(hash) {
14
- return this.cache.delete(hash);
15
+ delete(hashes) {
16
+ return hashes.map((hash) => {
17
+ return this.cache.delete(hash);
18
+ });
15
19
  }
16
20
  clear() {
17
21
  this.cache.clear();
18
22
  }
19
- get(hash) {
20
- var _a, _b;
21
- return (_a = this.cache.get(hash)) !== null && _a !== void 0 ? _a : (_b = this.parent) === null || _b === void 0 ? void 0 : _b.get(hash);
23
+ get(hashes) {
24
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
25
+ return yield Promise.all(hashes.map((hash) => tslib_1.__awaiter(this, void 0, void 0, function* () {
26
+ var _a, _b, _c, _d;
27
+ return (_d = (_a = this.cache.get(hash)) !== null && _a !== void 0 ? _a : (_c = (yield ((_b = this.parent) === null || _b === void 0 ? void 0 : _b.get([hash])))) === null || _c === void 0 ? void 0 : _c.pop()) !== null && _d !== void 0 ? _d : null;
28
+ })));
29
+ });
22
30
  }
23
31
  insert(payloads) {
24
32
  return payloads.map((payload) => {
@@ -28,15 +36,28 @@ class XyoMemoryArchivist extends XyoArchivist_1.XyoArchivistBase {
28
36
  return payloadWithmeta;
29
37
  });
30
38
  }
31
- find(filter) {
39
+ find(query) {
32
40
  const result = [];
33
41
  this.cache.forEach((value) => {
34
- if (value.schema === filter.schema) {
42
+ if (value.schema === query.filter.schema) {
35
43
  result.push(value);
36
44
  }
37
45
  });
38
46
  return result;
39
47
  }
48
+ commit() {
49
+ var _a;
50
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
51
+ const parent = (0, sdk_js_1.assertEx)(this.parent, 'Parent is required for commit');
52
+ const account = (0, sdk_js_1.assertEx)(this.account, 'Account is required for commit');
53
+ const payloads = (0, sdk_js_1.assertEx)(yield this.all(), 'Nothing to commit');
54
+ const builder = new boundwitness_1.XyoBoundWitnessBuilder();
55
+ const block = builder.payloads(payloads).witness(account).build();
56
+ const result = yield ((_a = parent.insert) === null || _a === void 0 ? void 0 : _a.call(parent, payloads.concat([block])));
57
+ yield this.clear();
58
+ return result;
59
+ });
60
+ }
40
61
  }
41
62
  exports.XyoMemoryArchivist = XyoMemoryArchivist;
42
63
  //# 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;IAiDlE,CAAC;IA/CQ,MAAM,CAAC,MAAgB;QAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEY,GAAG,CAAC,MAAgB;;YAC/B,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,MAAM,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE;;gBACxB,OAAO,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAI,MAAA,CAAC,MAAM,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,0CAAE,GAAG,EAAE,mCAAI,IAAI,CAAA;YAChF,CAAC,CAAA,CAAC,CACH,CAAA;QACH,CAAC;KAAA;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;AAlDD,gDAkDC"}
@@ -1,7 +1,10 @@
1
1
  import { XyoQueryPayload } from '@xyo-network/payload';
2
- export declare type XyoPayloadFindFilter = XyoQueryPayload<{
2
+ export interface XyoPayloadFindFilter {
3
3
  order?: 'desc' | 'asc';
4
4
  timestamp?: number;
5
5
  limit?: number;
6
6
  schema?: string;
7
+ }
8
+ export declare type XyoPayloadFindQuery = XyoQueryPayload<{
9
+ filter: XyoPayloadFindFilter;
7
10
  }>;
@@ -1,7 +1,8 @@
1
1
  export interface Archivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TQueryResponse = TReadResponse, TQuery = unknown, TId = string> {
2
- get(id: TId): Promise<TReadResponse | undefined> | TReadResponse | undefined;
2
+ get(ids: TId[]): Promise<(TReadResponse | null)[]> | (TReadResponse | null)[];
3
+ all?(): Promise<TReadResponse[]> | TReadResponse[];
3
4
  find?(query: TQuery): Promise<TQueryResponse[]> | TQueryResponse[];
4
5
  insert?(item: TWrite[]): Promise<TWriteResponse[]> | TWriteResponse[];
5
- delete?(id: TId): Promise<boolean> | boolean;
6
+ delete?(ids: TId[]): Promise<boolean[]> | boolean[];
6
7
  clear?(): void;
7
8
  }
@@ -1,17 +1,17 @@
1
1
  import { XyoAccount } from '@xyo-network/account';
2
2
  import { XyoPayload } from '@xyo-network/payload';
3
3
  import { Archivist } from './model';
4
- import { XyoPayloadFindFilter } from './XyoPayloadFindFilter';
5
- export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindFilter>;
4
+ import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
5
+ export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>;
6
6
  export declare abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implements XyoArchivist<T> {
7
7
  protected parent?: XyoArchivist<T>;
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: XyoPayloadFindFilter): T[] | Promise<T[]>;
12
- abstract get(hash: string): T | Promise<T | undefined> | undefined;
11
+ abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>;
12
+ abstract get(hash: string[]): (T | null)[] | Promise<(T | null)[]>;
13
13
  all(): T[] | Promise<T[]>;
14
- delete(_hash: string): boolean | Promise<boolean>;
14
+ delete(_hashes: string[]): boolean[] | Promise<boolean[]>;
15
15
  clear(): void | Promise<void>;
16
16
  commit(): void;
17
17
  }
@@ -6,7 +6,7 @@ export class XyoArchivistBase {
6
6
  all() {
7
7
  throw Error('getAll not supported');
8
8
  }
9
- delete(_hash) {
9
+ delete(_hashes) {
10
10
  throw Error('delete not supported');
11
11
  }
12
12
  clear() {
@@ -1 +1 @@
1
- {"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,gBAAgB;IAGpC,YAAY,MAAwB,EAAE,OAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAKM,GAAG;QACR,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,MAAM,CAAC,KAAa;QACzB,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,KAAK;QACV,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IACM,MAAM;QACX,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,gBAAgB;IAGpC,YAAY,MAAwB,EAAE,OAAoB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAKM,GAAG;QACR,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,MAAM,CAAC,OAAiB;QAC7B,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;IACM,KAAK;QACV,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;IACM,MAAM;QACX,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACrC,CAAC;CACF"}
@@ -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
- delete(hash: string): boolean | Promise<boolean>;
6
+ delete(hashes: 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(hashes: string[]): Promise<(XyoPayload | null)[]>;
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';
@@ -6,14 +8,18 @@ export class XyoMemoryArchivist extends XyoArchivistBase {
6
8
  super(...arguments);
7
9
  this.cache = new LruCache({ max: 10000 });
8
10
  }
9
- delete(hash) {
10
- return this.cache.delete(hash);
11
+ delete(hashes) {
12
+ return hashes.map((hash) => {
13
+ return this.cache.delete(hash);
14
+ });
11
15
  }
12
16
  clear() {
13
17
  this.cache.clear();
14
18
  }
15
- get(hash) {
16
- return this.cache.get(hash) ?? this.parent?.get(hash);
19
+ async get(hashes) {
20
+ return await Promise.all(hashes.map(async (hash) => {
21
+ return this.cache.get(hash) ?? (await this.parent?.get([hash]))?.pop() ?? null;
22
+ }));
17
23
  }
18
24
  insert(payloads) {
19
25
  return payloads.map((payload) => {
@@ -23,14 +29,24 @@ export class XyoMemoryArchivist extends XyoArchivistBase {
23
29
  return payloadWithmeta;
24
30
  });
25
31
  }
26
- find(filter) {
32
+ find(query) {
27
33
  const result = [];
28
34
  this.cache.forEach((value) => {
29
- if (value.schema === filter.schema) {
35
+ if (value.schema === query.filter.schema) {
30
36
  result.push(value);
31
37
  }
32
38
  });
33
39
  return result;
34
40
  }
41
+ async commit() {
42
+ const parent = assertEx(this.parent, 'Parent is required for commit');
43
+ const account = assertEx(this.account, 'Account is required for commit');
44
+ const payloads = assertEx(await this.all(), 'Nothing to commit');
45
+ const builder = new XyoBoundWitnessBuilder();
46
+ const block = builder.payloads(payloads).witness(account).build();
47
+ const result = await parent.insert?.(payloads.concat([block]));
48
+ await this.clear();
49
+ return result;
50
+ }
35
51
  }
36
52
  //# 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":"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"}
@@ -1,7 +1,10 @@
1
1
  import { XyoQueryPayload } from '@xyo-network/payload';
2
- export declare type XyoPayloadFindFilter = XyoQueryPayload<{
2
+ export interface XyoPayloadFindFilter {
3
3
  order?: 'desc' | 'asc';
4
4
  timestamp?: number;
5
5
  limit?: number;
6
6
  schema?: string;
7
+ }
8
+ export declare type XyoPayloadFindQuery = XyoQueryPayload<{
9
+ filter: XyoPayloadFindFilter;
7
10
  }>;
@@ -1,7 +1,8 @@
1
1
  export interface Archivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TQueryResponse = TReadResponse, TQuery = unknown, TId = string> {
2
- get(id: TId): Promise<TReadResponse | undefined> | TReadResponse | undefined;
2
+ get(ids: TId[]): Promise<(TReadResponse | null)[]> | (TReadResponse | null)[];
3
+ all?(): Promise<TReadResponse[]> | TReadResponse[];
3
4
  find?(query: TQuery): Promise<TQueryResponse[]> | TQueryResponse[];
4
5
  insert?(item: TWrite[]): Promise<TWriteResponse[]> | TWriteResponse[];
5
- delete?(id: TId): Promise<boolean> | boolean;
6
+ delete?(ids: TId[]): Promise<boolean[]> | boolean[];
6
7
  clear?(): void;
7
8
  }
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.5",
14
- "@xyo-network/boundwitness": "^2.22.5",
15
- "@xyo-network/core": "^2.22.5",
16
- "@xyo-network/payload": "^2.22.5",
13
+ "@xyo-network/account": "^2.22.8",
14
+ "@xyo-network/boundwitness": "^2.22.8",
15
+ "@xyo-network/core": "^2.22.8",
16
+ "@xyo-network/payload": "^2.22.8",
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.5",
59
+ "version": "2.22.8",
60
60
  "packageManager": "yarn@3.1.1"
61
61
  }
@@ -2,9 +2,9 @@ import { XyoAccount } from '@xyo-network/account'
2
2
  import { XyoPayload } from '@xyo-network/payload'
3
3
 
4
4
  import { Archivist } from './model'
5
- import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
5
+ import { XyoPayloadFindQuery } from './XyoPayloadFindFilter'
6
6
 
7
- export type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindFilter>
7
+ export type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>
8
8
 
9
9
  export abstract class XyoArchivistBase<T extends XyoPayload = XyoPayload> implements XyoArchivist<T> {
10
10
  protected parent?: XyoArchivist<T>
@@ -15,12 +15,12 @@ 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: XyoPayloadFindFilter): T[] | Promise<T[]>
19
- abstract get(hash: string): T | Promise<T | undefined> | undefined
18
+ abstract find<R extends T = T>(query: XyoPayloadFindQuery): R[] | Promise<R[]>
19
+ abstract get(hash: string[]): (T | null)[] | Promise<(T | null)[]>
20
20
  public all(): T[] | Promise<T[]> {
21
21
  throw Error('getAll not supported')
22
22
  }
23
- public delete(_hash: string): boolean | Promise<boolean> {
23
+ public delete(_hashes: string[]): boolean[] | Promise<boolean[]> {
24
24
  throw Error('delete not supported')
25
25
  }
26
26
  public clear(): void | Promise<void> {
@@ -1,25 +1,33 @@
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
- public delete(hash: string): boolean | Promise<boolean> {
11
- return this.cache.delete(hash)
12
+ public delete(hashes: string[]): boolean[] | Promise<boolean[]> {
13
+ return hashes.map((hash) => {
14
+ return this.cache.delete(hash)
15
+ })
12
16
  }
13
17
 
14
18
  public clear(): void | Promise<void> {
15
19
  this.cache.clear()
16
20
  }
17
21
 
18
- public get(hash: string): T | Promise<T | undefined> | undefined {
19
- return this.cache.get(hash) ?? this.parent?.get(hash)
22
+ public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
23
+ return await Promise.all(
24
+ hashes.map(async (hash) => {
25
+ return this.cache.get(hash) ?? (await this.parent?.get([hash]))?.pop() ?? null
26
+ })
27
+ )
20
28
  }
21
29
 
22
- public insert(payloads: T[]): T[] | Promise<T[]> {
30
+ public insert(payloads: XyoPayload[]): XyoPayload[] | Promise<XyoPayload[]> {
23
31
  return payloads.map((payload) => {
24
32
  const wrapper = new XyoPayloadWrapper(payload)
25
33
  const payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
@@ -28,13 +36,24 @@ export class XyoMemoryArchivist<T extends XyoPayload = XyoPayload> extends XyoAr
28
36
  })
29
37
  }
30
38
 
31
- public find<R extends T = T>(filter: XyoPayloadFindFilter): T[] | Promise<T[]> {
39
+ public find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): R[] | Promise<R[]> {
32
40
  const result: R[] = []
33
41
  this.cache.forEach((value) => {
34
- if (value.schema === filter.schema) {
42
+ if (value.schema === query.filter.schema) {
35
43
  result.push(value as R)
36
44
  }
37
45
  })
38
46
  return result
39
47
  }
48
+
49
+ public async commit() {
50
+ const parent = assertEx(this.parent, 'Parent is required for commit')
51
+ const account = assertEx(this.account, 'Account is required for commit')
52
+ const payloads = assertEx(await this.all(), 'Nothing to commit')
53
+ const builder = new XyoBoundWitnessBuilder<XyoBoundWitness, XyoPayload>()
54
+ const block = builder.payloads(payloads).witness(account).build()
55
+ const result = await parent.insert?.(payloads.concat([block]))
56
+ await this.clear()
57
+ return result
58
+ }
40
59
  }
@@ -1,8 +1,12 @@
1
1
  import { XyoQueryPayload } from '@xyo-network/payload'
2
2
 
3
- export type XyoPayloadFindFilter = XyoQueryPayload<{
3
+ export interface XyoPayloadFindFilter {
4
4
  order?: 'desc' | 'asc'
5
5
  timestamp?: number
6
6
  limit?: number
7
7
  schema?: string
8
+ }
9
+
10
+ export type XyoPayloadFindQuery = XyoQueryPayload<{
11
+ filter: XyoPayloadFindFilter
8
12
  }>
@@ -1,7 +1,8 @@
1
1
  export interface Archivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TQueryResponse = TReadResponse, TQuery = unknown, TId = string> {
2
- get(id: TId): Promise<TReadResponse | undefined> | TReadResponse | undefined
2
+ get(ids: TId[]): Promise<(TReadResponse | null)[]> | (TReadResponse | null)[]
3
+ all?(): Promise<TReadResponse[]> | TReadResponse[]
3
4
  find?(query: TQuery): Promise<TQueryResponse[]> | TQueryResponse[]
4
5
  insert?(item: TWrite[]): Promise<TWriteResponse[]> | TWriteResponse[]
5
- delete?(id: TId): Promise<boolean> | boolean
6
+ delete?(ids: TId[]): Promise<boolean[]> | boolean[]
6
7
  clear?(): void
7
8
  }