@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.
- package/dist/cjs/CookieArchivist.js +2 -2
- package/dist/cjs/CookieArchivist.js.map +1 -1
- package/dist/cjs/StorageArchivist.js +2 -2
- package/dist/cjs/StorageArchivist.js.map +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/docs.json +6092 -5130
- package/dist/esm/CookieArchivist.js +1 -1
- package/dist/esm/CookieArchivist.js.map +1 -1
- package/dist/esm/StorageArchivist.js +1 -1
- package/dist/esm/StorageArchivist.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/types/CookieArchivist.d.ts +1 -1
- package/dist/types/CookieArchivist.d.ts.map +1 -1
- package/dist/types/StorageArchivist.d.ts +1 -1
- package/dist/types/StorageArchivist.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +14 -12
- package/src/CookieArchivist.ts +1 -2
- package/src/StorageArchivist.ts +1 -2
- package/src/index.ts +2 -2
- package/src/spec/StorageArchivist.spec.ts +1 -1
- package/src/spec/testArchivist.ts +1 -2
- package/dist/cjs/AbstractArchivist.js +0 -166
- package/dist/cjs/AbstractArchivist.js.map +0 -1
- package/dist/cjs/MemoryArchivist.js +0 -106
- package/dist/cjs/MemoryArchivist.js.map +0 -1
- package/dist/esm/AbstractArchivist.js +0 -135
- package/dist/esm/AbstractArchivist.js.map +0 -1
- package/dist/esm/MemoryArchivist.js +0 -83
- package/dist/esm/MemoryArchivist.js.map +0 -1
- package/dist/types/AbstractArchivist.d.ts +0 -34
- package/dist/types/AbstractArchivist.d.ts.map +0 -1
- package/dist/types/MemoryArchivist.d.ts +0 -27
- package/dist/types/MemoryArchivist.d.ts.map +0 -1
- package/src/AbstractArchivist.ts +0 -189
- 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"}
|
package/src/AbstractArchivist.ts
DELETED
|
@@ -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
|
-
}
|
package/src/MemoryArchivist.ts
DELETED
|
@@ -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
|
-
}
|