@xyo-network/archivist 2.46.3 → 2.47.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 (39) hide show
  1. package/dist/cjs/CookieArchivist.js +2 -2
  2. package/dist/cjs/CookieArchivist.js.map +1 -1
  3. package/dist/cjs/StorageArchivist.js +2 -2
  4. package/dist/cjs/StorageArchivist.js.map +1 -1
  5. package/dist/cjs/index.js +2 -2
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/docs.json +6092 -5130
  8. package/dist/esm/CookieArchivist.js +1 -1
  9. package/dist/esm/CookieArchivist.js.map +1 -1
  10. package/dist/esm/StorageArchivist.js +1 -1
  11. package/dist/esm/StorageArchivist.js.map +1 -1
  12. package/dist/esm/index.js +2 -2
  13. package/dist/esm/index.js.map +1 -1
  14. package/dist/types/CookieArchivist.d.ts +1 -1
  15. package/dist/types/CookieArchivist.d.ts.map +1 -1
  16. package/dist/types/StorageArchivist.d.ts +1 -1
  17. package/dist/types/StorageArchivist.d.ts.map +1 -1
  18. package/dist/types/index.d.ts +2 -2
  19. package/dist/types/index.d.ts.map +1 -1
  20. package/package.json +14 -12
  21. package/src/CookieArchivist.ts +1 -2
  22. package/src/StorageArchivist.ts +1 -2
  23. package/src/index.ts +2 -2
  24. package/src/spec/StorageArchivist.spec.ts +1 -1
  25. package/src/spec/testArchivist.ts +1 -2
  26. package/dist/cjs/AbstractArchivist.js +0 -166
  27. package/dist/cjs/AbstractArchivist.js.map +0 -1
  28. package/dist/cjs/MemoryArchivist.js +0 -106
  29. package/dist/cjs/MemoryArchivist.js.map +0 -1
  30. package/dist/esm/AbstractArchivist.js +0 -135
  31. package/dist/esm/AbstractArchivist.js.map +0 -1
  32. package/dist/esm/MemoryArchivist.js +0 -83
  33. package/dist/esm/MemoryArchivist.js.map +0 -1
  34. package/dist/types/AbstractArchivist.d.ts +0 -34
  35. package/dist/types/AbstractArchivist.d.ts.map +0 -1
  36. package/dist/types/MemoryArchivist.d.ts +0 -27
  37. package/dist/types/MemoryArchivist.d.ts.map +0 -1
  38. package/src/AbstractArchivist.ts +0 -189
  39. package/src/MemoryArchivist.ts +0 -124
@@ -1,135 +0,0 @@
1
- import { assertEx } from '@xylabs/assert';
2
- import { Account } from '@xyo-network/account';
3
- import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistFindQuerySchema, ArchivistGetQuerySchema, ArchivistInsertQuerySchema, } from '@xyo-network/archivist-interface';
4
- import { ArchivistWrapper } from '@xyo-network/archivist-wrapper';
5
- import { AbstractModule, QueryBoundWitnessWrapper, XyoErrorBuilder } from '@xyo-network/module';
6
- import { PayloadWrapper } from '@xyo-network/payload-wrapper';
7
- import compact from 'lodash/compact';
8
- export class AbstractArchivist extends AbstractModule {
9
- _parents;
10
- get queries() {
11
- return [ArchivistGetQuerySchema, ...super.queries];
12
- }
13
- get storeParentReads() {
14
- return !!this.config?.storeParentReads;
15
- }
16
- all() {
17
- throw Error('Not implemented');
18
- }
19
- clear() {
20
- throw Error('Not implemented');
21
- }
22
- commit() {
23
- throw Error('Not implemented');
24
- }
25
- delete(_hashes) {
26
- throw Error('Not implemented');
27
- }
28
- async find(filter) {
29
- try {
30
- const filterSchemaList = filter?.schema ? (Array.isArray(filter.schema) ? filter.schema : [filter.schema]) : [];
31
- return (await this.all()).filter((payload) => filterSchemaList.includes(payload.schema));
32
- }
33
- catch (ex) {
34
- console.error(`Error: ${JSON.stringify(ex, null, 2)}`);
35
- throw ex;
36
- }
37
- }
38
- async get(hashes) {
39
- return compact(await Promise.all(hashes.map(async (hash) => {
40
- return (await this.getFromParents(hash)) ?? null;
41
- })));
42
- }
43
- async query(query, payloads, queryConfig) {
44
- const wrapper = QueryBoundWitnessWrapper.parseQuery(query, payloads);
45
- const typedQuery = wrapper.query.payload;
46
- assertEx(this.queryable(query, payloads, queryConfig));
47
- const resultPayloads = [];
48
- const queryAccount = new Account();
49
- try {
50
- switch (typedQuery.schema) {
51
- case ArchivistAllQuerySchema:
52
- resultPayloads.push(...(await this.all()));
53
- break;
54
- case ArchivistClearQuerySchema:
55
- await this.clear();
56
- break;
57
- case ArchivistCommitQuerySchema:
58
- resultPayloads.push(...(await this.commit()));
59
- break;
60
- case ArchivistDeleteQuerySchema:
61
- await this.delete(typedQuery.hashes);
62
- break;
63
- case ArchivistFindQuerySchema:
64
- resultPayloads.push(...(await this.find(typedQuery.filter)));
65
- break;
66
- case ArchivistGetQuerySchema:
67
- resultPayloads.push(...(await this.get(typedQuery.hashes)));
68
- break;
69
- case ArchivistInsertQuerySchema: {
70
- const wrappers = payloads?.map((payload) => PayloadWrapper.parse(payload)) ?? [];
71
- assertEx(typedQuery.payloads, `Missing payloads: ${JSON.stringify(typedQuery, null, 2)}`);
72
- const resolvedWrappers = wrappers.filter((wrapper) => typedQuery.payloads.includes(wrapper.hash));
73
- assertEx(resolvedWrappers.length === typedQuery.payloads.length, 'Could not find some passed hashes');
74
- resultPayloads.push(...(await this.insert(resolvedWrappers.map((wrapper) => wrapper.payload))));
75
- break;
76
- }
77
- default:
78
- return super.query(query, payloads);
79
- }
80
- }
81
- catch (ex) {
82
- const error = ex;
83
- resultPayloads.push(new XyoErrorBuilder([wrapper.hash], error.message).build());
84
- }
85
- return this.bindResult(resultPayloads, queryAccount);
86
- }
87
- async getFromParents(hash) {
88
- const parents = await this.parents();
89
- if (Object.entries(parents.read ?? {}).length > 0) {
90
- const results = compact(await Promise.all(Object.values(parents.read ?? {}).map(async (parent) => {
91
- const queryPayload = PayloadWrapper.parse({ hashes: [hash], schema: ArchivistGetQuerySchema });
92
- const query = await this.bindQuery(queryPayload);
93
- const [, payloads] = (await parent?.query(query[0], query[1])) ?? [];
94
- const wrapper = payloads?.[0] ? new PayloadWrapper(payloads?.[0]) : undefined;
95
- if (wrapper && wrapper.hash !== hash) {
96
- console.warn(`Parent [${parent?.address}] returned payload with invalid hash [${hash} != ${wrapper.hash}]`);
97
- return null;
98
- }
99
- return wrapper?.payload;
100
- })));
101
- return results[0];
102
- }
103
- return null;
104
- }
105
- async parents() {
106
- this._parents = this._parents ?? {
107
- commit: await this.resolveArchivists(this.config?.parents?.commit),
108
- read: await this.resolveArchivists(this.config?.parents?.read),
109
- write: await this.resolveArchivists(this.config?.parents?.write),
110
- };
111
- return assertEx(this._parents);
112
- }
113
- async writeToParent(parent, payloads) {
114
- const wrapper = new ArchivistWrapper(parent);
115
- return await wrapper.insert(payloads);
116
- }
117
- async writeToParents(payloads) {
118
- const parents = await this.parents();
119
- this.logger?.log(parents.write?.length ?? 0);
120
- return compact(await Promise.all(Object.values(parents.write ?? {}).map(async (parent) => {
121
- return parent ? await this.writeToParent(parent, payloads) : undefined;
122
- }))).flat();
123
- }
124
- async resolveArchivists(archivists = []) {
125
- const resolvedWrappers = {};
126
- const resolvedModules = await this.resolver?.resolve({ address: archivists });
127
- const modules = resolvedModules ?? [];
128
- modules.forEach((module) => {
129
- const wrapper = new ArchivistWrapper(module);
130
- resolvedWrappers[wrapper.address] = wrapper;
131
- });
132
- return resolvedWrappers;
133
- }
134
- }
135
- //# sourceMappingURL=AbstractArchivist.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractArchivist.js","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- import { assertEx } from '@xylabs/assert';
2
- import { fulfilled } from '@xylabs/promise';
3
- import { ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistCommitQuerySchema, ArchivistDeleteQuerySchema, ArchivistFindQuerySchema, ArchivistInsertQuerySchema, } from '@xyo-network/archivist-interface';
4
- import { PayloadWrapper } from '@xyo-network/payload-wrapper';
5
- import compact from 'lodash/compact';
6
- import LruCache from 'lru-cache';
7
- import { AbstractArchivist } from './AbstractArchivist';
8
- export const MemoryArchivistConfigSchema = 'network.xyo.module.config.archivist.memory';
9
- export class MemoryArchivist extends AbstractArchivist {
10
- static configSchema = MemoryArchivistConfigSchema;
11
- cache;
12
- constructor(params) {
13
- super(params);
14
- this.cache = new LruCache({ max: this.max });
15
- }
16
- get max() {
17
- return this.config?.max ?? 10000;
18
- }
19
- get queries() {
20
- return [
21
- ArchivistAllQuerySchema,
22
- ArchivistDeleteQuerySchema,
23
- ArchivistClearQuerySchema,
24
- ArchivistFindQuerySchema,
25
- ArchivistInsertQuerySchema,
26
- ArchivistCommitQuerySchema,
27
- ...super.queries,
28
- ];
29
- }
30
- static async create(params) {
31
- return (await super.create(params));
32
- }
33
- all() {
34
- return compact(this.cache.dump().map((value) => value[1].value));
35
- }
36
- clear() {
37
- this.cache.clear();
38
- }
39
- async commit() {
40
- const payloads = assertEx(await this.all(), 'Nothing to commit');
41
- const settled = await Promise.allSettled(compact(Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
42
- const queryPayload = PayloadWrapper.parse({
43
- payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
44
- schema: ArchivistInsertQuerySchema,
45
- });
46
- const query = await this.bindQuery(queryPayload, payloads);
47
- return (await parent?.query(query[0], query[1]))?.[0];
48
- })));
49
- await this.clear();
50
- return compact(settled.filter(fulfilled).map((result) => result.value));
51
- }
52
- delete(hashes) {
53
- return hashes.map((hash) => {
54
- return this.cache.delete(hash);
55
- });
56
- }
57
- async get(hashes) {
58
- return compact(await Promise.all(hashes.map(async (hash) => {
59
- const payload = this.cache.get(hash) ?? (await super.get([hash]))[0] ?? null;
60
- if (this.storeParentReads) {
61
- this.cache.set(hash, payload);
62
- }
63
- return payload;
64
- })));
65
- }
66
- async insert(payloads) {
67
- payloads.map((payload) => {
68
- const wrapper = new PayloadWrapper(payload);
69
- const payloadWithMeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() };
70
- this.cache.set(payloadWithMeta._hash, payloadWithMeta);
71
- return payloadWithMeta;
72
- });
73
- const result = await this.bindResult([...payloads]);
74
- const parentBoundWitnesses = [];
75
- const parents = await this.parents();
76
- if (Object.entries(parents.write ?? {}).length) {
77
- //we store the child bw also
78
- parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...payloads])));
79
- }
80
- return [result[0], ...parentBoundWitnesses];
81
- }
82
- }
83
- //# sourceMappingURL=MemoryArchivist.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryArchivist.js","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { ArchivistConfig, ArchivistModule } from '@xyo-network/archivist-interface';
2
- import { ArchivistWrapper } from '@xyo-network/archivist-wrapper';
3
- import { XyoBoundWitness } from '@xyo-network/boundwitness-model';
4
- import { AbstractModule, ModuleConfig, ModuleQueryResult, XyoQueryBoundWitness } from '@xyo-network/module';
5
- import { PayloadFindFilter, XyoPayload } from '@xyo-network/payload-model';
6
- import { Promisable, PromisableArray } from '@xyo-network/promise';
7
- export interface XyoArchivistParentWrappers {
8
- commit?: Record<string, ArchivistWrapper>;
9
- read?: Record<string, ArchivistWrapper>;
10
- write?: Record<string, ArchivistWrapper>;
11
- }
12
- export declare abstract class AbstractArchivist<TConfig extends ArchivistConfig = ArchivistConfig> extends AbstractModule<TConfig> implements ArchivistModule {
13
- private _parents?;
14
- get queries(): string[];
15
- protected get storeParentReads(): boolean;
16
- all(): PromisableArray<XyoPayload>;
17
- clear(): Promisable<void>;
18
- commit(): Promisable<XyoBoundWitness[]>;
19
- delete(_hashes: string[]): PromisableArray<boolean>;
20
- find(filter?: PayloadFindFilter): Promise<XyoPayload[]>;
21
- get(hashes: string[]): Promise<XyoPayload[]>;
22
- query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(query: T, payloads?: XyoPayload[], queryConfig?: TConfig): Promise<ModuleQueryResult>;
23
- protected getFromParents(hash: string): Promise<(import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
24
- schema: string;
25
- }) | null>;
26
- protected parents(): Promise<XyoArchivistParentWrappers>;
27
- protected writeToParent(parent: ArchivistModule, payloads: XyoPayload[]): Promise<(import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").XyoBoundWitnessFields & {
28
- schema: "network.xyo.boundwitness";
29
- })[]>;
30
- protected writeToParents(payloads: XyoPayload[]): Promise<XyoBoundWitness[]>;
31
- private resolveArchivists;
32
- abstract insert(item: XyoPayload[]): PromisableArray<XyoBoundWitness>;
33
- }
34
- //# sourceMappingURL=AbstractArchivist.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractArchivist.d.ts","sourceRoot":"","sources":["../../src/AbstractArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,eAAe,EAMf,eAAe,EAEhB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAA6C,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AACtJ,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE1E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGlE,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CACzC;AAED,8BAAsB,iBAAiB,CAAC,OAAO,SAAS,eAAe,GAAG,eAAe,CACvF,SAAQ,cAAc,CAAC,OAAO,CAC9B,YAAW,eAAe;IAE1B,OAAO,CAAC,QAAQ,CAAC,CAA4B;IAE7C,IAAoB,OAAO,IAAI,MAAM,EAAE,CAEtC;IAED,SAAS,KAAK,gBAAgB,YAE7B;IAEM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC;IAIlC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC;IAIzB,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;IAIvC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAI7C,IAAI,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAUvD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAU1C,KAAK,CAAC,CAAC,SAAS,oBAAoB,GAAG,oBAAoB,EAAE,OAAO,SAAS,YAAY,GAAG,YAAY,EACrH,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,UAAU,EAAE,EACvB,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,iBAAiB,CAAC;cA4Cb,cAAc,CAAC,IAAI,EAAE,MAAM;;;cAuB3B,OAAO;cASP,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE;;;cAK7D,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAYpE,iBAAiB;IAW/B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,eAAe,CAAC;CACtE"}
@@ -1,27 +0,0 @@
1
- import { ArchivistConfig } from '@xyo-network/archivist-interface';
2
- import { XyoBoundWitness } from '@xyo-network/boundwitness-model';
3
- import { ModuleParams } from '@xyo-network/module';
4
- import { XyoPayload } from '@xyo-network/payload-model';
5
- import { PromisableArray } from '@xyo-network/promise';
6
- import { AbstractArchivist } from './AbstractArchivist';
7
- export type MemoryArchivistConfigSchema = 'network.xyo.module.config.archivist.memory';
8
- export declare const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema;
9
- export type MemoryArchivistConfig = ArchivistConfig<{
10
- max?: number;
11
- schema: MemoryArchivistConfigSchema;
12
- }>;
13
- export declare class MemoryArchivist<TConfig extends MemoryArchivistConfig = MemoryArchivistConfig> extends AbstractArchivist<TConfig> {
14
- static configSchema: "network.xyo.module.config.archivist.memory";
15
- private cache;
16
- protected constructor(params: ModuleParams<TConfig>);
17
- get max(): number;
18
- get queries(): string[];
19
- static create(params?: ModuleParams<MemoryArchivistConfig>): Promise<MemoryArchivist>;
20
- all(): PromisableArray<XyoPayload>;
21
- clear(): void | Promise<void>;
22
- commit(): Promise<XyoBoundWitness[]>;
23
- delete(hashes: string[]): PromisableArray<boolean>;
24
- get(hashes: string[]): Promise<XyoPayload[]>;
25
- insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]>;
26
- }
27
- //# sourceMappingURL=MemoryArchivist.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/MemoryArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,eAAe,EAKhB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAItD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,MAAM,2BAA2B,GAAG,4CAA4C,CAAA;AACtF,eAAO,MAAM,2BAA2B,EAAE,2BAA0E,CAAA;AAEpH,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,2BAA2B,CAAA;CACpC,CAAC,CAAA;AAEF,qBAAa,eAAe,CAAC,OAAO,SAAS,qBAAqB,GAAG,qBAAqB,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAC5H,OAAgB,YAAY,+CAA8B;IAE1D,OAAO,CAAC,KAAK,CAAqC;IAElD,SAAS,aAAa,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC;IAKnD,IAAW,GAAG,WAEb;IAED,IAAoB,OAAO,aAU1B;WAEqB,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAIpF,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC;IAIlC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvB,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAkB1C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAMrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAc5C,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAiBxE"}
@@ -1,189 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import { Account } from '@xyo-network/account'
3
- import {
4
- ArchivistAllQuerySchema,
5
- ArchivistClearQuerySchema,
6
- ArchivistCommitQuerySchema,
7
- ArchivistConfig,
8
- ArchivistDeleteQuerySchema,
9
- ArchivistFindQuerySchema,
10
- ArchivistGetQuery,
11
- ArchivistGetQuerySchema,
12
- ArchivistInsertQuerySchema,
13
- ArchivistModule,
14
- ArchivistQuery,
15
- } from '@xyo-network/archivist-interface'
16
- import { ArchivistWrapper } from '@xyo-network/archivist-wrapper'
17
- import { XyoBoundWitness } from '@xyo-network/boundwitness-model'
18
- import { AbstractModule, ModuleConfig, ModuleQueryResult, QueryBoundWitnessWrapper, XyoErrorBuilder, XyoQueryBoundWitness } from '@xyo-network/module'
19
- import { PayloadFindFilter, XyoPayload } from '@xyo-network/payload-model'
20
- import { PayloadWrapper } from '@xyo-network/payload-wrapper'
21
- import { Promisable, PromisableArray } from '@xyo-network/promise'
22
- import compact from 'lodash/compact'
23
-
24
- export interface XyoArchivistParentWrappers {
25
- commit?: Record<string, ArchivistWrapper>
26
- read?: Record<string, ArchivistWrapper>
27
- write?: Record<string, ArchivistWrapper>
28
- }
29
-
30
- export abstract class AbstractArchivist<TConfig extends ArchivistConfig = ArchivistConfig>
31
- extends AbstractModule<TConfig>
32
- implements ArchivistModule
33
- {
34
- private _parents?: XyoArchivistParentWrappers
35
-
36
- public override get queries(): string[] {
37
- return [ArchivistGetQuerySchema, ...super.queries]
38
- }
39
-
40
- protected get storeParentReads() {
41
- return !!this.config?.storeParentReads
42
- }
43
-
44
- public all(): PromisableArray<XyoPayload> {
45
- throw Error('Not implemented')
46
- }
47
-
48
- public clear(): Promisable<void> {
49
- throw Error('Not implemented')
50
- }
51
-
52
- public commit(): Promisable<XyoBoundWitness[]> {
53
- throw Error('Not implemented')
54
- }
55
-
56
- public delete(_hashes: string[]): PromisableArray<boolean> {
57
- throw Error('Not implemented')
58
- }
59
-
60
- public async find(filter?: PayloadFindFilter): Promise<XyoPayload[]> {
61
- try {
62
- const filterSchemaList = filter?.schema ? (Array.isArray(filter.schema) ? filter.schema : [filter.schema]) : []
63
- return (await this.all()).filter((payload) => filterSchemaList.includes(payload.schema))
64
- } catch (ex) {
65
- console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
66
- throw ex
67
- }
68
- }
69
-
70
- public async get(hashes: string[]): Promise<XyoPayload[]> {
71
- return compact(
72
- await Promise.all(
73
- hashes.map(async (hash) => {
74
- return (await this.getFromParents(hash)) ?? null
75
- }),
76
- ),
77
- )
78
- }
79
-
80
- override async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(
81
- query: T,
82
- payloads?: XyoPayload[],
83
- queryConfig?: TConfig,
84
- ): Promise<ModuleQueryResult> {
85
- const wrapper = QueryBoundWitnessWrapper.parseQuery<ArchivistQuery>(query, payloads)
86
- const typedQuery = wrapper.query.payload
87
- assertEx(this.queryable(query, payloads, queryConfig))
88
- const resultPayloads: XyoPayload[] = []
89
- const queryAccount = new Account()
90
- try {
91
- switch (typedQuery.schema) {
92
- case ArchivistAllQuerySchema:
93
- resultPayloads.push(...(await this.all()))
94
- break
95
- case ArchivistClearQuerySchema:
96
- await this.clear()
97
- break
98
- case ArchivistCommitQuerySchema:
99
- resultPayloads.push(...(await this.commit()))
100
- break
101
- case ArchivistDeleteQuerySchema:
102
- await this.delete(typedQuery.hashes)
103
- break
104
- case ArchivistFindQuerySchema:
105
- resultPayloads.push(...(await this.find(typedQuery.filter)))
106
- break
107
- case ArchivistGetQuerySchema:
108
- resultPayloads.push(...(await this.get(typedQuery.hashes)))
109
- break
110
- case ArchivistInsertQuerySchema: {
111
- const wrappers = payloads?.map((payload) => PayloadWrapper.parse(payload)) ?? []
112
- assertEx(typedQuery.payloads, `Missing payloads: ${JSON.stringify(typedQuery, null, 2)}`)
113
- const resolvedWrappers = wrappers.filter((wrapper) => typedQuery.payloads.includes(wrapper.hash))
114
- assertEx(resolvedWrappers.length === typedQuery.payloads.length, 'Could not find some passed hashes')
115
- resultPayloads.push(...(await this.insert(resolvedWrappers.map((wrapper) => wrapper.payload))))
116
- break
117
- }
118
- default:
119
- return super.query(query, payloads)
120
- }
121
- } catch (ex) {
122
- const error = ex as Error
123
- resultPayloads.push(new XyoErrorBuilder([wrapper.hash], error.message).build())
124
- }
125
- return this.bindResult(resultPayloads, queryAccount)
126
- }
127
-
128
- protected async getFromParents(hash: string) {
129
- const parents = await this.parents()
130
- if (Object.entries(parents.read ?? {}).length > 0) {
131
- const results = compact(
132
- await Promise.all(
133
- Object.values(parents.read ?? {}).map(async (parent) => {
134
- const queryPayload = PayloadWrapper.parse<ArchivistGetQuery>({ hashes: [hash], schema: ArchivistGetQuerySchema })
135
- const query = await this.bindQuery(queryPayload)
136
- const [, payloads] = (await parent?.query(query[0], query[1])) ?? []
137
- const wrapper = payloads?.[0] ? new PayloadWrapper(payloads?.[0]) : undefined
138
- if (wrapper && wrapper.hash !== hash) {
139
- console.warn(`Parent [${parent?.address}] returned payload with invalid hash [${hash} != ${wrapper.hash}]`)
140
- return null
141
- }
142
- return wrapper?.payload
143
- }),
144
- ),
145
- )
146
- return results[0]
147
- }
148
- return null
149
- }
150
-
151
- protected async parents() {
152
- this._parents = this._parents ?? {
153
- commit: await this.resolveArchivists(this.config?.parents?.commit),
154
- read: await this.resolveArchivists(this.config?.parents?.read),
155
- write: await this.resolveArchivists(this.config?.parents?.write),
156
- }
157
- return assertEx(this._parents)
158
- }
159
-
160
- protected async writeToParent(parent: ArchivistModule, payloads: XyoPayload[]) {
161
- const wrapper = new ArchivistWrapper(parent)
162
- return await wrapper.insert(payloads)
163
- }
164
-
165
- protected async writeToParents(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
166
- const parents = await this.parents()
167
- this.logger?.log(parents.write?.length ?? 0)
168
- return compact(
169
- await Promise.all(
170
- Object.values(parents.write ?? {}).map(async (parent) => {
171
- return parent ? await this.writeToParent(parent, payloads) : undefined
172
- }),
173
- ),
174
- ).flat()
175
- }
176
-
177
- private async resolveArchivists(archivists: string[] = []) {
178
- const resolvedWrappers: Record<string, ArchivistWrapper> = {}
179
- const resolvedModules = await this.resolver?.resolve({ address: archivists })
180
- const modules = resolvedModules ?? []
181
- modules.forEach((module) => {
182
- const wrapper = new ArchivistWrapper(module)
183
- resolvedWrappers[wrapper.address] = wrapper
184
- })
185
- return resolvedWrappers
186
- }
187
-
188
- abstract insert(item: XyoPayload[]): PromisableArray<XyoBoundWitness>
189
- }
@@ -1,124 +0,0 @@
1
- import { assertEx } from '@xylabs/assert'
2
- import { fulfilled } from '@xylabs/promise'
3
- import {
4
- ArchivistAllQuerySchema,
5
- ArchivistClearQuerySchema,
6
- ArchivistCommitQuerySchema,
7
- ArchivistConfig,
8
- ArchivistDeleteQuerySchema,
9
- ArchivistFindQuerySchema,
10
- ArchivistInsertQuery,
11
- ArchivistInsertQuerySchema,
12
- } from '@xyo-network/archivist-interface'
13
- import { XyoBoundWitness } from '@xyo-network/boundwitness-model'
14
- import { ModuleParams } from '@xyo-network/module'
15
- import { XyoPayload } from '@xyo-network/payload-model'
16
- import { PayloadWrapper } from '@xyo-network/payload-wrapper'
17
- import { PromisableArray } from '@xyo-network/promise'
18
- import compact from 'lodash/compact'
19
- import LruCache from 'lru-cache'
20
-
21
- import { AbstractArchivist } from './AbstractArchivist'
22
-
23
- export type MemoryArchivistConfigSchema = 'network.xyo.module.config.archivist.memory'
24
- export const MemoryArchivistConfigSchema: MemoryArchivistConfigSchema = 'network.xyo.module.config.archivist.memory'
25
-
26
- export type MemoryArchivistConfig = ArchivistConfig<{
27
- max?: number
28
- schema: MemoryArchivistConfigSchema
29
- }>
30
-
31
- export class MemoryArchivist<TConfig extends MemoryArchivistConfig = MemoryArchivistConfig> extends AbstractArchivist<TConfig> {
32
- static override configSchema = MemoryArchivistConfigSchema
33
-
34
- private cache: LruCache<string, XyoPayload | null>
35
-
36
- protected constructor(params: ModuleParams<TConfig>) {
37
- super(params)
38
- this.cache = new LruCache<string, XyoPayload | null>({ max: this.max })
39
- }
40
-
41
- public get max() {
42
- return this.config?.max ?? 10000
43
- }
44
-
45
- public override get queries() {
46
- return [
47
- ArchivistAllQuerySchema,
48
- ArchivistDeleteQuerySchema,
49
- ArchivistClearQuerySchema,
50
- ArchivistFindQuerySchema,
51
- ArchivistInsertQuerySchema,
52
- ArchivistCommitQuerySchema,
53
- ...super.queries,
54
- ]
55
- }
56
-
57
- static override async create(params?: ModuleParams<MemoryArchivistConfig>): Promise<MemoryArchivist> {
58
- return (await super.create(params)) as MemoryArchivist
59
- }
60
-
61
- public override all(): PromisableArray<XyoPayload> {
62
- return compact(this.cache.dump().map((value) => value[1].value))
63
- }
64
-
65
- public override clear(): void | Promise<void> {
66
- this.cache.clear()
67
- }
68
-
69
- public override async commit(): Promise<XyoBoundWitness[]> {
70
- const payloads = assertEx(await this.all(), 'Nothing to commit')
71
- const settled = await Promise.allSettled(
72
- compact(
73
- Object.values((await this.parents()).commit ?? [])?.map(async (parent) => {
74
- const queryPayload = PayloadWrapper.parse<ArchivistInsertQuery>({
75
- payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
76
- schema: ArchivistInsertQuerySchema,
77
- })
78
- const query = await this.bindQuery(queryPayload, payloads)
79
- return (await parent?.query(query[0], query[1]))?.[0]
80
- }),
81
- ),
82
- )
83
- await this.clear()
84
- return compact(settled.filter(fulfilled).map((result) => result.value))
85
- }
86
-
87
- public override delete(hashes: string[]): PromisableArray<boolean> {
88
- return hashes.map((hash) => {
89
- return this.cache.delete(hash)
90
- })
91
- }
92
-
93
- public async get(hashes: string[]): Promise<XyoPayload[]> {
94
- return compact(
95
- await Promise.all(
96
- hashes.map(async (hash) => {
97
- const payload = this.cache.get(hash) ?? (await super.get([hash]))[0] ?? null
98
- if (this.storeParentReads) {
99
- this.cache.set(hash, payload)
100
- }
101
- return payload
102
- }),
103
- ),
104
- )
105
- }
106
-
107
- public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
108
- payloads.map((payload) => {
109
- const wrapper = new PayloadWrapper(payload)
110
- const payloadWithMeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
111
- this.cache.set(payloadWithMeta._hash, payloadWithMeta)
112
- return payloadWithMeta
113
- })
114
-
115
- const result = await this.bindResult([...payloads])
116
- const parentBoundWitnesses: XyoBoundWitness[] = []
117
- const parents = await this.parents()
118
- if (Object.entries(parents.write ?? {}).length) {
119
- //we store the child bw also
120
- parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...payloads])))
121
- }
122
- return [result[0], ...parentBoundWitnesses]
123
- }
124
- }