@xyo-network/archivist 2.25.5 → 2.26.0

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.
Files changed (83) hide show
  1. package/dist/cjs/Abstract.d.ts +29 -0
  2. package/dist/cjs/Abstract.d.ts.map +1 -0
  3. package/dist/cjs/Abstract.js +23 -0
  4. package/dist/cjs/Abstract.js.map +1 -0
  5. package/dist/cjs/Archivist.d.ts +19 -0
  6. package/dist/cjs/Archivist.d.ts.map +1 -0
  7. package/dist/cjs/Archivist.js +3 -0
  8. package/dist/cjs/Archivist.js.map +1 -0
  9. package/dist/cjs/Query/All.d.ts +7 -0
  10. package/dist/cjs/Query/All.d.ts.map +1 -0
  11. package/dist/cjs/Query/All.js +5 -0
  12. package/dist/cjs/Query/All.js.map +1 -0
  13. package/dist/cjs/Query/Get.d.ts +8 -0
  14. package/dist/cjs/Query/Get.d.ts.map +1 -0
  15. package/dist/cjs/Query/Get.js +5 -0
  16. package/dist/cjs/Query/Get.js.map +1 -0
  17. package/dist/cjs/Query/index.d.ts +2 -0
  18. package/dist/cjs/Query/index.d.ts.map +1 -0
  19. package/dist/cjs/Query/index.js +5 -0
  20. package/dist/cjs/Query/index.js.map +1 -0
  21. package/dist/cjs/XyoArchivist.d.ts +13 -3
  22. package/dist/cjs/XyoArchivist.d.ts.map +1 -1
  23. package/dist/cjs/XyoArchivist.js +3 -0
  24. package/dist/cjs/XyoArchivist.js.map +1 -1
  25. package/dist/cjs/XyoArchivistConfig.d.ts +21 -8
  26. package/dist/cjs/XyoArchivistConfig.d.ts.map +1 -1
  27. package/dist/cjs/XyoArchivistConfig.js +2 -2
  28. package/dist/cjs/XyoArchivistConfig.js.map +1 -1
  29. package/dist/cjs/XyoMemoryArchivist.d.ts +18 -9
  30. package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
  31. package/dist/cjs/XyoMemoryArchivist.js +21 -9
  32. package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
  33. package/dist/cjs/index.d.ts +2 -1
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +2 -1
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/esm/Abstract.d.ts +29 -0
  38. package/dist/esm/Abstract.d.ts.map +1 -0
  39. package/dist/esm/Abstract.js +18 -0
  40. package/dist/esm/Abstract.js.map +1 -0
  41. package/dist/esm/Archivist.d.ts +19 -0
  42. package/dist/esm/Archivist.d.ts.map +1 -0
  43. package/dist/esm/Archivist.js +2 -0
  44. package/dist/esm/Archivist.js.map +1 -0
  45. package/dist/esm/Query/All.d.ts +7 -0
  46. package/dist/esm/Query/All.d.ts.map +1 -0
  47. package/dist/esm/Query/All.js +2 -0
  48. package/dist/esm/Query/All.js.map +1 -0
  49. package/dist/esm/Query/Get.d.ts +8 -0
  50. package/dist/esm/Query/Get.d.ts.map +1 -0
  51. package/dist/esm/Query/Get.js +2 -0
  52. package/dist/esm/Query/Get.js.map +1 -0
  53. package/dist/esm/Query/index.d.ts +2 -0
  54. package/dist/esm/Query/index.d.ts.map +1 -0
  55. package/dist/esm/Query/index.js +2 -0
  56. package/dist/esm/Query/index.js.map +1 -0
  57. package/dist/esm/XyoArchivist.d.ts +13 -3
  58. package/dist/esm/XyoArchivist.d.ts.map +1 -1
  59. package/dist/esm/XyoArchivist.js +2 -1
  60. package/dist/esm/XyoArchivist.js.map +1 -1
  61. package/dist/esm/XyoArchivistConfig.d.ts +21 -8
  62. package/dist/esm/XyoArchivistConfig.d.ts.map +1 -1
  63. package/dist/esm/XyoArchivistConfig.js +2 -2
  64. package/dist/esm/XyoArchivistConfig.js.map +1 -1
  65. package/dist/esm/XyoMemoryArchivist.d.ts +18 -9
  66. package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
  67. package/dist/esm/XyoMemoryArchivist.js +13 -5
  68. package/dist/esm/XyoMemoryArchivist.js.map +1 -1
  69. package/dist/esm/index.d.ts +2 -1
  70. package/dist/esm/index.d.ts.map +1 -1
  71. package/dist/esm/index.js +2 -1
  72. package/dist/esm/index.js.map +1 -1
  73. package/package.json +9 -6
  74. package/src/Abstract.ts +40 -0
  75. package/src/{model/Archivist.ts → Archivist.ts} +1 -6
  76. package/src/Query/All.ts +8 -0
  77. package/src/Query/Get.ts +9 -0
  78. package/src/Query/index.ts +1 -0
  79. package/src/XyoArchivist.ts +19 -3
  80. package/src/XyoArchivistConfig.ts +30 -9
  81. package/src/XyoMemoryArchivist.ts +30 -13
  82. package/src/index.ts +2 -1
  83. package/src/model/index.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Query/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA"}
@@ -1,5 +1,15 @@
1
+ import { XyoBoundWitness } from '@xyo-network/boundwitness';
2
+ import { XyoModule, XyoQueryPayload } from '@xyo-network/module';
1
3
  import { XyoPayload } from '@xyo-network/payload';
2
- import { Archivist } from './model';
3
- import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
4
- export declare type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>;
4
+ import { Promisable } from '@xyo-network/promisable';
5
+ import { Archivist } from './Archivist';
6
+ export declare type XyoArchivistQueryPayloadGetSchema = 'network.xyo.query.archivist.get';
7
+ export declare const XyoArchivistQueryPayloadGetSchema = "network.xyo.query.archivist.get";
8
+ export declare type XyoArchivistQueryPayloadAllSchema = 'network.xyo.query.archivist.all';
9
+ export declare const XyoArchivistQueryPayloadAllSchema = "network.xyo.query.archivist.all";
10
+ export declare type XyoArchivistQueryPayloadSchema = XyoArchivistQueryPayloadGetSchema | XyoArchivistQueryPayloadAllSchema;
11
+ export declare type XyoArchivistQueryPayload<T extends XyoPayload = XyoPayload> = XyoQueryPayload<T>;
12
+ export interface XyoArchivist<Q extends XyoArchivistQueryPayload = XyoArchivistQueryPayload> extends XyoModule<Q>, Archivist<XyoPayload, XyoPayload, XyoPayload, XyoPayload, XyoArchivistQueryPayload> {
13
+ query<T extends Q>(query: T): Promisable<[XyoBoundWitness, XyoPayload[]]>;
14
+ }
5
15
  //# sourceMappingURL=XyoArchivist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyoArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,oBAAY,YAAY,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAA"}
1
+ {"version":3,"file":"XyoArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,oBAAY,iCAAiC,GAAG,iCAAiC,CAAA;AACjF,eAAO,MAAM,iCAAiC,oCAAoC,CAAA;AAElF,oBAAY,iCAAiC,GAAG,iCAAiC,CAAA;AACjF,eAAO,MAAM,iCAAiC,oCAAoC,CAAA;AAElF,oBAAY,8BAA8B,GAAG,iCAAiC,GAAG,iCAAiC,CAAA;AAElH,oBAAY,wBAAwB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI,eAAe,CAAC,CAAC,CAAC,CAAA;AAE5F,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,wBAAwB,GAAG,wBAAwB,CACzF,SAAQ,SAAS,CAAC,CAAC,CAAC,EAClB,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,wBAAwB,CAAC;IACrF,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;CAC1E"}
@@ -1,2 +1,3 @@
1
- export {};
1
+ export const XyoArchivistQueryPayloadGetSchema = 'network.xyo.query.archivist.get';
2
+ export const XyoArchivistQueryPayloadAllSchema = 'network.xyo.query.archivist.all';
2
3
  //# sourceMappingURL=XyoArchivist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"XyoArchivist.js","sourceRoot":"","sources":["../../src/XyoArchivist.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iCAAiC,GAAG,iCAAiC,CAAA;AAGlF,MAAM,CAAC,MAAM,iCAAiC,GAAG,iCAAiC,CAAA"}
@@ -1,18 +1,31 @@
1
1
  import { XyoAccount } from '@xyo-network/account';
2
+ import { XyoModuleConfig } from '@xyo-network/module';
2
3
  import { XyoPayload } from '@xyo-network/payload';
3
- import { XyoArchivist } from './XyoArchivist';
4
- export interface XyoArchivistConfig<T extends XyoPayload = XyoPayload> {
5
- parent?: XyoArchivist<T>;
4
+ import { XyoArchivist, XyoArchivistQueryPayload } from './XyoArchivist';
5
+ export interface XyoArchivistParents {
6
+ read?: string[];
7
+ write?: string[];
8
+ commit?: string[];
9
+ }
10
+ export interface XyoResolvedArchivistParents {
11
+ read?: (XyoArchivist | null)[];
12
+ write?: (XyoArchivist | null)[];
13
+ commit?: (XyoArchivist | null)[];
14
+ }
15
+ export declare type XyoArchivistConfig<T extends XyoPayload = XyoPayload, M extends XyoArchivist = XyoArchivist<XyoArchivistQueryPayload<T>>> = XyoModuleConfig<{
16
+ /** @field address of one or more parent archivists to read from */
17
+ parents?: XyoArchivistParents;
6
18
  account?: XyoAccount;
7
19
  cacheParentReads?: boolean;
8
- writeThrough?: boolean;
9
- }
10
- export declare class XyoArchivistConfigWrapper<T extends XyoPayload = XyoPayload, C extends XyoArchivistConfig<T> = XyoArchivistConfig<T>> {
20
+ /** @field address of archivist to write through to */
21
+ writeThrough?: string;
22
+ } & T, M>;
23
+ export declare class XyoArchivistConfigWrapper<C extends XyoArchivistConfig = XyoArchivistConfig> {
11
24
  protected config?: C;
12
25
  constructor(config?: C);
13
- get parent(): XyoArchivist<T> | undefined;
26
+ get parents(): XyoArchivistParents | undefined;
14
27
  get account(): XyoAccount | undefined;
15
- get writeThrough(): boolean | undefined;
28
+ get writeThrough(): string | undefined;
16
29
  get cacheParentReads(): boolean | undefined;
17
30
  }
18
31
  //# sourceMappingURL=XyoArchivistConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyoArchivistConfig.d.ts","sourceRoot":"","sources":["../../src/XyoArchivistConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IACnE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,qBAAa,yBAAyB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAAE,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAC/H,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACR,MAAM,CAAC,EAAE,CAAC;IAItB,IAAW,MAAM,gCAEhB;IAED,IAAW,OAAO,2BAEjB;IAED,IAAW,YAAY,wBAEtB;IAED,IAAW,gBAAgB,wBAE1B;CACF"}
1
+ {"version":3,"file":"XyoArchivistConfig.d.ts","sourceRoot":"","sources":["../../src/XyoArchivistConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAEvE,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAA;IAC/B,MAAM,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAA;CACjC;AAED,oBAAY,kBAAkB,CAC5B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,YAAY,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAChE,eAAe,CACjB;IACE,mEAAmE;IACnE,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,CAAC,EACL,CAAC,CACF,CAAA;AAED,qBAAa,yBAAyB,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB;IACtF,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACR,MAAM,CAAC,EAAE,CAAC;IAItB,IAAW,OAAO,oCAEjB;IAED,IAAW,OAAO,2BAEjB;IAED,IAAW,YAAY,uBAEtB;IAED,IAAW,gBAAgB,wBAE1B;CACF"}
@@ -3,8 +3,8 @@ export class XyoArchivistConfigWrapper {
3
3
  constructor(config) {
4
4
  this.config = config;
5
5
  }
6
- get parent() {
7
- return this.config?.parent;
6
+ get parents() {
7
+ return this.config?.parents;
8
8
  }
9
9
  get account() {
10
10
  return this.config?.account;
@@ -1 +1 @@
1
- {"version":3,"file":"XyoArchivistConfig.js","sourceRoot":"","sources":["../../src/XyoArchivistConfig.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,yBAAyB;IAC1B,MAAM,CAAI;IACpB,YAAY,MAAU;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAA;IAC5B,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAA;IAC7B,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,MAAM,EAAE,YAAY,CAAA;IAClC,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"XyoArchivistConfig.js","sourceRoot":"","sources":["../../src/XyoArchivistConfig.ts"],"names":[],"mappings":"AAiCA,MAAM,OAAO,yBAAyB;IAC1B,MAAM,CAAI;IACpB,YAAY,MAAU;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAA;IAC7B,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,CAAA;IAC7B,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,MAAM,EAAE,YAAY,CAAA;IAClC,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAA;IACtC,CAAC;CACF"}
@@ -1,23 +1,32 @@
1
+ import { XyoBoundWitness } from '@xyo-network/boundwitness';
1
2
  import { XyoPayload } from '@xyo-network/payload';
2
- import { PromisableArray } from './model';
3
- import { XyoArchivist } from './XyoArchivist';
4
- import { XyoArchivistConfig, XyoArchivistConfigWrapper } from './XyoArchivistConfig';
3
+ import { Promisable, PromisableArray } from '@xyo-network/promisable';
4
+ import { XyoAbstractArchivist } from './Abstract';
5
+ import { XyoArchivistQueryPayload } from './XyoArchivist';
6
+ import { XyoArchivistConfig } from './XyoArchivistConfig';
5
7
  import { XyoPayloadFindQuery } from './XyoPayloadFindFilter';
6
- export interface XyoMemoryArchivistConfig<T extends XyoPayload = XyoPayload> extends XyoArchivistConfig<T> {
8
+ export declare type XyoMemoryArchivistConfig = XyoArchivistConfig<{
9
+ schema: 'network.xyo.module.config.archivist.memory';
7
10
  max?: number;
8
- }
9
- export declare class XyoMemoryArchivist<C extends XyoMemoryArchivistConfig<XyoPayload> = XyoMemoryArchivistConfig<XyoPayload>> extends XyoArchivistConfigWrapper<XyoPayload, C> implements XyoArchivist {
11
+ }>;
12
+ export declare class XyoMemoryArchivistWrapper<Q extends XyoArchivistQueryPayload = XyoArchivistQueryPayload, C extends XyoMemoryArchivistConfig = XyoMemoryArchivistConfig> extends XyoAbstractArchivist<Q, C> {
13
+ query<Q>(_query: Q): Promisable<[XyoBoundWitness, XyoPayload<{
14
+ schema: string;
15
+ }>[]]>;
10
16
  get max(): number;
11
17
  private cache;
12
- constructor(config?: C);
18
+ constructor(config: C);
13
19
  delete(hashes: string[]): PromisableArray<boolean>;
14
20
  clear(): void | Promise<void>;
21
+ getFromParents(hash: string): Promise<XyoPayload<{
22
+ schema: string;
23
+ }>>;
15
24
  get(hashes: string[]): Promise<(XyoPayload | null)[]>;
16
25
  insert(payloads: XyoPayload[]): PromisableArray<XyoPayload>;
17
26
  find<R extends XyoPayload = XyoPayload>(query: XyoPayloadFindQuery): PromisableArray<R>;
18
27
  all(): Promise<XyoPayload[]> | XyoPayload[];
19
- commit(): Promise<XyoPayload<{
28
+ commit(): Promise<(XyoPayload<{
20
29
  schema: string;
21
- }>[]>;
30
+ }>[] | undefined)[]>;
22
31
  }
23
32
  //# sourceMappingURL=XyoMemoryArchivist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyoMemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AAGpE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IACxG,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,kBAAkB,CAAC,CAAC,SAAS,wBAAwB,CAAC,UAAU,CAAC,GAAG,wBAAwB,CAAC,UAAU,CAAC,CACnH,SAAQ,yBAAyB,CAAC,UAAU,EAAE,CAAC,CAC/C,YAAW,YAAY;IAEvB,IAAW,GAAG,WAEb;IAED,OAAO,CAAC,KAAK,CAA8B;gBAE/B,MAAM,CAAC,EAAE,CAAC;IAKf,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAMlD,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;IAQ3D,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC;IAS3D,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,mBAAmB,GAAG,eAAe,CAAC,CAAC,CAAC;IAUvF,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE;IAIrC,MAAM;;;CAUpB"}
1
+ {"version":3,"file":"XyoMemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA0B,MAAM,2BAA2B,CAAA;AACnF,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE5D,oBAAY,wBAAwB,GAAG,kBAAkB,CAAC;IACxD,MAAM,EAAE,4CAA4C,CAAA;IACpD,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAC,CAAA;AAEF,qBAAa,yBAAyB,CACpC,CAAC,SAAS,wBAAwB,GAAG,wBAAwB,EAC7D,CAAC,SAAS,wBAAwB,GAAG,wBAAwB,CAC7D,SAAQ,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,eAAe,EAAE,UAAU,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC,CAAC;IAGpF,IAAW,GAAG,WAEb;IAED,OAAO,CAAC,KAAK,CAA8B;gBAE/B,MAAM,EAAE,CAAC;IAKd,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAMlD,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvB,cAAc,CAAC,IAAI,EAAE,MAAM;;;IAY3B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;IAQ3D,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC;IAS3D,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,mBAAmB,GAAG,eAAe,CAAC,CAAC,CAAC;IAUvF,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE;IAIrC,MAAM;;;CASpB"}
@@ -1,9 +1,13 @@
1
1
  import { assertEx } from '@xylabs/sdk-js';
2
2
  import { XyoBoundWitnessBuilder } from '@xyo-network/boundwitness';
3
3
  import { XyoPayloadWrapper } from '@xyo-network/payload';
4
+ import compact from 'lodash/compact';
4
5
  import LruCache from 'lru-cache';
5
- import { XyoArchivistConfigWrapper } from './XyoArchivistConfig';
6
- export class XyoMemoryArchivist extends XyoArchivistConfigWrapper {
6
+ import { XyoAbstractArchivist } from './Abstract';
7
+ export class XyoMemoryArchivistWrapper extends XyoAbstractArchivist {
8
+ query(_query) {
9
+ throw new Error('Method not implemented.');
10
+ }
7
11
  get max() {
8
12
  return this.config?.max ?? 10000;
9
13
  }
@@ -20,9 +24,14 @@ export class XyoMemoryArchivist extends XyoArchivistConfigWrapper {
20
24
  clear() {
21
25
  this.cache.clear();
22
26
  }
27
+ async getFromParents(hash) {
28
+ return compact(await Promise.all(compact(this.parents?.read?.map(async (parent) => {
29
+ return (await parent?.get([hash]))?.[0] ?? null;
30
+ }))))[0];
31
+ }
23
32
  async get(hashes) {
24
33
  return await Promise.all(hashes.map(async (hash) => {
25
- return this.cache.get(hash) ?? (await this.parent?.get([hash]))?.pop() ?? null;
34
+ return this.cache.get(hash) ?? (await this.getFromParents(hash)) ?? null;
26
35
  }));
27
36
  }
28
37
  insert(payloads) {
@@ -46,12 +55,11 @@ export class XyoMemoryArchivist extends XyoArchivistConfigWrapper {
46
55
  return this.cache.dump().map((value) => value[1].value);
47
56
  }
48
57
  async commit() {
49
- const parent = assertEx(this.parent, 'Parent is required for commit');
50
58
  const account = assertEx(this.account, 'Account is required for commit');
51
59
  const payloads = assertEx(await this.all(), 'Nothing to commit');
52
60
  const builder = new XyoBoundWitnessBuilder();
53
61
  const block = builder.payloads(payloads).witness(account).build();
54
- const result = await parent.insert?.(payloads.concat([block]));
62
+ const result = await Promise.all(compact(this.parents?.commit?.map(async (parent) => await parent?.insert?.(payloads.concat([block])))));
55
63
  await this.clear();
56
64
  return result;
57
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- export * from './model';
1
+ export * from './Abstract';
2
+ export * from './Archivist';
2
3
  export * from './XyoArchivist';
3
4
  export * from './XyoArchivistConfig';
4
5
  export * from './XyoMemoryArchivist';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
package/dist/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
- export * from './model';
1
+ export * from './Abstract';
2
+ export * from './Archivist';
2
3
  export * from './XyoArchivist';
3
4
  export * from './XyoArchivistConfig';
4
5
  export * from './XyoMemoryArchivist';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
package/package.json CHANGED
@@ -10,15 +10,18 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@xylabs/sdk-js": "^2.6.6",
13
- "@xyo-network/account": "^2.25.5",
14
- "@xyo-network/boundwitness": "^2.25.5",
15
- "@xyo-network/payload": "^2.25.5",
16
- "lru-cache": "^7.13.2",
13
+ "@xyo-network/account": "^2.26.0",
14
+ "@xyo-network/boundwitness": "^2.26.0",
15
+ "@xyo-network/module": "^2.26.0",
16
+ "@xyo-network/payload": "^2.26.0",
17
+ "@xyo-network/promisable": "^2.26.0",
18
+ "lodash": "^4.17.21",
19
+ "lru-cache": "^7.14.0",
17
20
  "tslib": "^2.4.0"
18
21
  },
19
22
  "description": "Primary SDK for using XYO Protocol 2.0",
20
23
  "devDependencies": {
21
- "@xylabs/tsconfig": "^2.5.99"
24
+ "@xylabs/tsconfig": "^2.5.117"
22
25
  },
23
26
  "browser": "dist/esm/index.js",
24
27
  "docs": "dist/docs.json",
@@ -53,5 +56,5 @@
53
56
  },
54
57
  "sideEffects": false,
55
58
  "types": "dist/esm/index.d.ts",
56
- "version": "2.25.5"
59
+ "version": "2.26.0"
57
60
  }
@@ -0,0 +1,40 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
3
+ import { XyoAbstractModule } from '@xyo-network/module'
4
+ import { XyoPayload } from '@xyo-network/payload'
5
+ import { NullablePromisableArray, Promisable, PromisableArray } from '@xyo-network/promisable'
6
+ import compact from 'lodash/compact'
7
+
8
+ import { Archivist } from './Archivist'
9
+ import { XyoArchivist, XyoArchivistQueryPayload } from './XyoArchivist'
10
+ import { XyoArchivistConfig, XyoResolvedArchivistParents } from './XyoArchivistConfig'
11
+
12
+ export abstract class XyoAbstractArchivist<
13
+ Q extends XyoArchivistQueryPayload = XyoArchivistQueryPayload,
14
+ C extends XyoArchivistConfig = XyoArchivistConfig,
15
+ >
16
+ extends XyoAbstractModule<Q, C>
17
+ implements XyoArchivist<XyoArchivistQueryPayload>, Archivist<XyoPayload, XyoPayload, XyoPayload, XyoPayload, XyoArchivistQueryPayload>
18
+ {
19
+ abstract get(ids: string[]): NullablePromisableArray<XyoPayload<{ schema: string }>>
20
+
21
+ abstract find(query: XyoArchivistQueryPayload<XyoPayload<{ schema: string }>>): PromisableArray<XyoPayload<{ schema: string }>>
22
+
23
+ abstract insert(item: XyoPayload<{ schema: string }>[]): PromisableArray<XyoPayload<{ schema: string }>>
24
+
25
+ abstract override query<Q>(query: Q): Promisable<[XyoBoundWitness, XyoPayload[]]>
26
+
27
+ get resolver() {
28
+ return this.config.resolver
29
+ }
30
+
31
+ private _parents?: XyoResolvedArchivistParents
32
+ get parents() {
33
+ this._parents = this._parents ?? {
34
+ commit: compact(this.config.parents?.commit?.map((parent) => this.resolver?.(parent))),
35
+ read: compact(this.config.parents?.read?.map((parent) => this.resolver?.(parent))),
36
+ write: compact(this.config.parents?.write?.map((parent) => this.resolver?.(parent))),
37
+ }
38
+ return assertEx(this._parents)
39
+ }
40
+ }
@@ -1,9 +1,4 @@
1
- export type Promisable<T> = Promise<T> | T
2
- export type PromisableArray<T> = Promisable<T[]>
3
- export type OptionalPromisable<T> = Promisable<T | undefined>
4
- export type OptionalPromisableArray<T> = PromisableArray<T | undefined>
5
- export type NullablePromisable<T> = Promisable<T | null>
6
- export type NullablePromisableArray<T> = PromisableArray<T | null>
1
+ import { NullablePromisableArray, PromisableArray } from '@xyo-network/promisable'
7
2
 
8
3
  export interface ReadArchivist<TReadResponse, TId = string> {
9
4
  get(ids: TId[]): NullablePromisableArray<TReadResponse>
@@ -0,0 +1,8 @@
1
+ import { XyoArchivistQueryPayload } from '../XyoArchivist'
2
+
3
+ export type XyoArchvistAllQueryPayloadSchema = 'network.xyo.query.archivist.all'
4
+ export const XyoArchvistAllQueryPayloadSchema = 'network.xyo.query.archivist.all'
5
+
6
+ export type XyoArchvistAllQueryPayload = XyoArchivistQueryPayload<{
7
+ schema: XyoArchvistAllQueryPayloadSchema
8
+ }>
@@ -0,0 +1,9 @@
1
+ import { XyoArchivistQueryPayload } from '../XyoArchivist'
2
+
3
+ export type XyoArchvistGetQueryPayloadSchema = 'network.xyo.query.archivist.get'
4
+ export const XyoArchvistGetQueryPayloadSchema = 'network.xyo.query.archivist.get'
5
+
6
+ export type XyoArchvistGetQueryPayload = XyoArchivistQueryPayload<{
7
+ schema: XyoArchvistGetQueryPayloadSchema
8
+ hashes: string[]
9
+ }>
@@ -0,0 +1 @@
1
+ export * from './Get'
@@ -1,6 +1,22 @@
1
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
2
+ import { XyoModule, XyoQueryPayload } from '@xyo-network/module'
1
3
  import { XyoPayload } from '@xyo-network/payload'
4
+ import { Promisable } from '@xyo-network/promisable'
2
5
 
3
- import { Archivist } from './model'
4
- import { XyoPayloadFindQuery } from './XyoPayloadFindFilter'
6
+ import { Archivist } from './Archivist'
5
7
 
6
- export type XyoArchivist<T extends XyoPayload = XyoPayload> = Archivist<T, T, T, T, XyoPayloadFindQuery>
8
+ export type XyoArchivistQueryPayloadGetSchema = 'network.xyo.query.archivist.get'
9
+ export const XyoArchivistQueryPayloadGetSchema = 'network.xyo.query.archivist.get'
10
+
11
+ export type XyoArchivistQueryPayloadAllSchema = 'network.xyo.query.archivist.all'
12
+ export const XyoArchivistQueryPayloadAllSchema = 'network.xyo.query.archivist.all'
13
+
14
+ export type XyoArchivistQueryPayloadSchema = XyoArchivistQueryPayloadGetSchema | XyoArchivistQueryPayloadAllSchema
15
+
16
+ export type XyoArchivistQueryPayload<T extends XyoPayload = XyoPayload> = XyoQueryPayload<T>
17
+
18
+ export interface XyoArchivist<Q extends XyoArchivistQueryPayload = XyoArchivistQueryPayload>
19
+ extends XyoModule<Q>,
20
+ Archivist<XyoPayload, XyoPayload, XyoPayload, XyoPayload, XyoArchivistQueryPayload> {
21
+ query<T extends Q>(query: T): Promisable<[XyoBoundWitness, XyoPayload[]]>
22
+ }
@@ -1,23 +1,44 @@
1
1
  import { XyoAccount } from '@xyo-network/account'
2
+ import { XyoModuleConfig } from '@xyo-network/module'
2
3
  import { XyoPayload } from '@xyo-network/payload'
3
4
 
4
- import { XyoArchivist } from './XyoArchivist'
5
+ import { XyoArchivist, XyoArchivistQueryPayload } from './XyoArchivist'
5
6
 
6
- export interface XyoArchivistConfig<T extends XyoPayload = XyoPayload> {
7
- parent?: XyoArchivist<T>
8
- account?: XyoAccount
9
- cacheParentReads?: boolean
10
- writeThrough?: boolean
7
+ export interface XyoArchivistParents {
8
+ read?: string[]
9
+ write?: string[]
10
+ commit?: string[]
11
11
  }
12
12
 
13
- export class XyoArchivistConfigWrapper<T extends XyoPayload = XyoPayload, C extends XyoArchivistConfig<T> = XyoArchivistConfig<T>> {
13
+ export interface XyoResolvedArchivistParents {
14
+ read?: (XyoArchivist | null)[]
15
+ write?: (XyoArchivist | null)[]
16
+ commit?: (XyoArchivist | null)[]
17
+ }
18
+
19
+ export type XyoArchivistConfig<
20
+ T extends XyoPayload = XyoPayload,
21
+ M extends XyoArchivist = XyoArchivist<XyoArchivistQueryPayload<T>>,
22
+ > = XyoModuleConfig<
23
+ {
24
+ /** @field address of one or more parent archivists to read from */
25
+ parents?: XyoArchivistParents
26
+ account?: XyoAccount
27
+ cacheParentReads?: boolean
28
+ /** @field address of archivist to write through to */
29
+ writeThrough?: string
30
+ } & T,
31
+ M
32
+ >
33
+
34
+ export class XyoArchivistConfigWrapper<C extends XyoArchivistConfig = XyoArchivistConfig> {
14
35
  protected config?: C
15
36
  constructor(config?: C) {
16
37
  this.config = config
17
38
  }
18
39
 
19
- public get parent() {
20
- return this.config?.parent
40
+ public get parents() {
41
+ return this.config?.parents
21
42
  }
22
43
 
23
44
  public get account() {
@@ -1,28 +1,34 @@
1
1
  import { assertEx } from '@xylabs/sdk-js'
2
2
  import { XyoBoundWitness, XyoBoundWitnessBuilder } from '@xyo-network/boundwitness'
3
3
  import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
4
+ import { Promisable, PromisableArray } from '@xyo-network/promisable'
5
+ import compact from 'lodash/compact'
4
6
  import LruCache from 'lru-cache'
5
7
 
6
- import { PromisableArray } from './model'
7
- import { XyoArchivist } from './XyoArchivist'
8
- import { XyoArchivistConfig, XyoArchivistConfigWrapper } from './XyoArchivistConfig'
8
+ import { XyoAbstractArchivist } from './Abstract'
9
+ import { XyoArchivistQueryPayload } from './XyoArchivist'
10
+ import { XyoArchivistConfig } from './XyoArchivistConfig'
9
11
  import { XyoPayloadFindQuery } from './XyoPayloadFindFilter'
10
12
 
11
- export interface XyoMemoryArchivistConfig<T extends XyoPayload = XyoPayload> extends XyoArchivistConfig<T> {
13
+ export type XyoMemoryArchivistConfig = XyoArchivistConfig<{
14
+ schema: 'network.xyo.module.config.archivist.memory'
12
15
  max?: number
13
- }
16
+ }>
14
17
 
15
- export class XyoMemoryArchivist<C extends XyoMemoryArchivistConfig<XyoPayload> = XyoMemoryArchivistConfig<XyoPayload>>
16
- extends XyoArchivistConfigWrapper<XyoPayload, C>
17
- implements XyoArchivist
18
- {
18
+ export class XyoMemoryArchivistWrapper<
19
+ Q extends XyoArchivistQueryPayload = XyoArchivistQueryPayload,
20
+ C extends XyoMemoryArchivistConfig = XyoMemoryArchivistConfig,
21
+ > extends XyoAbstractArchivist<Q, C> {
22
+ query<Q>(_query: Q): Promisable<[XyoBoundWitness, XyoPayload<{ schema: string }>[]]> {
23
+ throw new Error('Method not implemented.')
24
+ }
19
25
  public get max() {
20
26
  return this.config?.max ?? 10000
21
27
  }
22
28
 
23
29
  private cache: LruCache<string, XyoPayload>
24
30
 
25
- constructor(config?: C) {
31
+ constructor(config: C) {
26
32
  super(config)
27
33
  this.cache = new LruCache<string, XyoPayload>({ max: this.max })
28
34
  }
@@ -37,10 +43,22 @@ export class XyoMemoryArchivist<C extends XyoMemoryArchivistConfig<XyoPayload> =
37
43
  this.cache.clear()
38
44
  }
39
45
 
46
+ public async getFromParents(hash: string) {
47
+ return compact(
48
+ await Promise.all(
49
+ compact(
50
+ this.parents?.read?.map(async (parent) => {
51
+ return (await parent?.get([hash]))?.[0] ?? null
52
+ }),
53
+ ),
54
+ ),
55
+ )[0]
56
+ }
57
+
40
58
  public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
41
59
  return await Promise.all(
42
60
  hashes.map(async (hash) => {
43
- return this.cache.get(hash) ?? (await this.parent?.get([hash]))?.pop() ?? null
61
+ return this.cache.get(hash) ?? (await this.getFromParents(hash)) ?? null
44
62
  }),
45
63
  )
46
64
  }
@@ -69,12 +87,11 @@ export class XyoMemoryArchivist<C extends XyoMemoryArchivistConfig<XyoPayload> =
69
87
  }
70
88
 
71
89
  public async commit() {
72
- const parent = assertEx(this.parent, 'Parent is required for commit')
73
90
  const account = assertEx(this.account, 'Account is required for commit')
74
91
  const payloads = assertEx(await this.all(), 'Nothing to commit')
75
92
  const builder = new XyoBoundWitnessBuilder<XyoBoundWitness, XyoPayload>()
76
93
  const block = builder.payloads(payloads).witness(account).build()
77
- const result = await parent.insert?.(payloads.concat([block]))
94
+ const result = await Promise.all(compact(this.parents?.commit?.map(async (parent) => await parent?.insert?.(payloads.concat([block])))))
78
95
  await this.clear()
79
96
  return result
80
97
  }
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
- export * from './model'
1
+ export * from './Abstract'
2
+ export * from './Archivist'
2
3
  export * from './XyoArchivist'
3
4
  export * from './XyoArchivistConfig'
4
5
  export * from './XyoMemoryArchivist'
@@ -1 +0,0 @@
1
- export * from './Archivist'