@xyo-network/archivist 2.28.0-rc.6 → 2.28.1
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/XyoMemoryArchivist.d.ts +1 -1
- package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoMemoryArchivist.js +69 -29
- package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
- package/dist/docs.json +150 -150
- package/dist/esm/XyoMemoryArchivist.d.ts +1 -1
- package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
- package/dist/esm/XyoMemoryArchivist.js +68 -28
- package/dist/esm/XyoMemoryArchivist.js.map +1 -1
- package/package.json +6 -7
- package/src/XyoMemoryArchivist.ts +70 -36
|
@@ -16,7 +16,7 @@ export declare class XyoMemoryArchivist extends XyoAbstractArchivist<XyoMemoryAr
|
|
|
16
16
|
constructor(config: XyoMemoryArchivistConfig);
|
|
17
17
|
delete(hashes: string[]): PromisableArray<boolean>;
|
|
18
18
|
clear(): void | Promise<void>;
|
|
19
|
-
getFromParents(hash: string): Promise<{
|
|
19
|
+
protected getFromParents(hash: string): Promise<{
|
|
20
20
|
schema: string;
|
|
21
21
|
previousHash?: string | undefined;
|
|
22
22
|
sources?: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoMemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAUjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,oBAAY,8BAA8B,GAAG,4CAA4C,CAAA;AACzF,eAAO,MAAM,8BAA8B,EAAE,8BAA6E,CAAA;AAE1H,oBAAY,wBAAwB,GAAG,kBAAkB,CAAC;IACxD,MAAM,EAAE,8BAA8B,CAAA;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"XyoMemoryArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAUjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,oBAAY,8BAA8B,GAAG,4CAA4C,CAAA;AACzF,eAAO,MAAM,8BAA8B,EAAE,8BAA6E,CAAA;AAE1H,oBAAY,wBAAwB,GAAG,kBAAkB,CAAC;IACxD,MAAM,EAAE,8BAA8B,CAAA;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAC,CAAA;AAQF,qBAAa,kBAAmB,SAAQ,oBAAoB,CAAC,wBAAwB,CAAC;IACpF,IAAW,GAAG,WAEb;IAED,OAAO,CAAC,KAAK,CAA8B;IAE3C,IAAoB,OAAO,8DAS1B;gBAEW,MAAM,EAAE,wBAAwB;IAKrC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAUzC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;cAQ7B,cAAc,CAAC,IAAI,EAAE,MAAM;;;;;;IAa9B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;IAY3D,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC;IAa3D,IAAI,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAG,eAAe,CAAC,CAAC,CAAC;IAczF,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE;IAQrC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAmB7C"}
|
|
@@ -6,6 +6,11 @@ import LruCache from 'lru-cache';
|
|
|
6
6
|
import { XyoAbstractArchivist } from './Abstract';
|
|
7
7
|
import { XyoArchivistAllQueryPayloadSchema, XyoArchivistClearQueryPayloadSchema, XyoArchivistCommitQueryPayloadSchema, XyoArchivistDeleteQueryPayloadSchema, XyoArchivistFindQueryPayloadSchema, XyoArchivistGetQueryPayloadSchema, XyoArchivistInsertQueryPayloadSchema, } from './Query';
|
|
8
8
|
export const XyoMemoryArchivistConfigSchema = 'network.xyo.module.config.archivist.memory';
|
|
9
|
+
class MemoryArchivistError extends Error {
|
|
10
|
+
constructor(action, error, message) {
|
|
11
|
+
super(`Memory Archivist [${action}] failed${message ? ` (${message})` : ''}`, { cause: error });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
9
14
|
export class XyoMemoryArchivist extends XyoAbstractArchivist {
|
|
10
15
|
get max() {
|
|
11
16
|
return this.config?.max ?? 10000;
|
|
@@ -26,12 +31,22 @@ export class XyoMemoryArchivist extends XyoAbstractArchivist {
|
|
|
26
31
|
this.cache = new LruCache({ max: this.max });
|
|
27
32
|
}
|
|
28
33
|
delete(hashes) {
|
|
29
|
-
|
|
30
|
-
return
|
|
31
|
-
|
|
34
|
+
try {
|
|
35
|
+
return hashes.map((hash) => {
|
|
36
|
+
return this.cache.delete(hash);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (ex) {
|
|
40
|
+
throw new MemoryArchivistError('delete', ex, 'unexpected');
|
|
41
|
+
}
|
|
32
42
|
}
|
|
33
43
|
clear() {
|
|
34
|
-
|
|
44
|
+
try {
|
|
45
|
+
this.cache.clear();
|
|
46
|
+
}
|
|
47
|
+
catch (ex) {
|
|
48
|
+
throw new MemoryArchivistError('clear', ex, 'unexpected');
|
|
49
|
+
}
|
|
35
50
|
}
|
|
36
51
|
async getFromParents(hash) {
|
|
37
52
|
return compact(await Promise.all(compact(Object.values(this.parents?.read ?? {}).map(async (parent) => {
|
|
@@ -40,38 +55,63 @@ export class XyoMemoryArchivist extends XyoAbstractArchivist {
|
|
|
40
55
|
}))))[0];
|
|
41
56
|
}
|
|
42
57
|
async get(hashes) {
|
|
43
|
-
|
|
44
|
-
return
|
|
45
|
-
|
|
58
|
+
try {
|
|
59
|
+
return await Promise.all(hashes.map(async (hash) => {
|
|
60
|
+
return this.cache.get(hash) ?? (await this.getFromParents(hash)) ?? null;
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
catch (ex) {
|
|
64
|
+
throw new MemoryArchivistError('get', ex, 'unexpected');
|
|
65
|
+
}
|
|
46
66
|
}
|
|
47
67
|
insert(payloads) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
try {
|
|
69
|
+
return payloads.map((payload) => {
|
|
70
|
+
const wrapper = new XyoPayloadWrapper(payload);
|
|
71
|
+
const payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() };
|
|
72
|
+
this.cache.set(payloadWithmeta._hash, payloadWithmeta);
|
|
73
|
+
return payloadWithmeta;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (ex) {
|
|
77
|
+
throw new MemoryArchivistError('insert', ex, 'unexpected');
|
|
78
|
+
}
|
|
54
79
|
}
|
|
55
80
|
find(filter) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
try {
|
|
82
|
+
const result = [];
|
|
83
|
+
this.cache.forEach((value) => {
|
|
84
|
+
if (value.schema === filter.schema) {
|
|
85
|
+
result.push(value);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
catch (ex) {
|
|
91
|
+
throw new MemoryArchivistError('find', ex, 'unexpected');
|
|
92
|
+
}
|
|
63
93
|
}
|
|
64
94
|
all() {
|
|
65
|
-
|
|
95
|
+
try {
|
|
96
|
+
return this.cache.dump().map((value) => value[1].value);
|
|
97
|
+
}
|
|
98
|
+
catch (ex) {
|
|
99
|
+
throw new MemoryArchivistError('all', ex, 'unexpected');
|
|
100
|
+
}
|
|
66
101
|
}
|
|
67
102
|
async commit() {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
103
|
+
try {
|
|
104
|
+
const account = assertEx(this.account, 'Account is required for commit');
|
|
105
|
+
const payloads = assertEx(await this.all(), 'Nothing to commit');
|
|
106
|
+
const builder = new XyoBoundWitnessBuilder();
|
|
107
|
+
const block = builder.payloads(payloads).witness(account).build();
|
|
108
|
+
await Promise.allSettled(compact(Object.values(this.parents?.commit ?? [])?.map(async (parent) => await parent?.query({ payloads: [block, ...payloads], schema: XyoArchivistInsertQueryPayloadSchema }))));
|
|
109
|
+
await this.clear();
|
|
110
|
+
return payloads;
|
|
111
|
+
}
|
|
112
|
+
catch (ex) {
|
|
113
|
+
throw new MemoryArchivistError('commit', ex, 'unexpected');
|
|
114
|
+
}
|
|
75
115
|
}
|
|
76
116
|
}
|
|
77
117
|
//# sourceMappingURL=XyoMemoryArchivist.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAmB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACnF,OAAO,EAAc,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAEpE,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EACL,iCAAiC,EACjC,mCAAmC,EACnC,oCAAoC,EACpC,oCAAoC,EACpC,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,GACrC,MAAM,SAAS,CAAA;AAKhB,MAAM,CAAC,MAAM,8BAA8B,GAAmC,4CAA4C,CAAA;AAO1H,MAAM,OAAO,kBAAmB,SAAQ,oBAA8C;IACpF,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,KAAK,CAAA;IAClC,CAAC;IAEO,KAAK,CAA8B;IAE3C,IAAoB,OAAO;QACzB,OAAO;YACL,GAAG,KAAK,CAAC,OAAO;YAChB,iCAAiC;YACjC,oCAAoC;YACpC,mCAAmC;YACnC,kCAAkC;YAClC,oCAAoC;SACrC,CAAA;IACH,CAAC;IAED,YAAY,MAAgC;QAC1C,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAqB,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAClE,CAAC;IAEM,MAAM,CAAC,MAAgB;QAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"XyoMemoryArchivist.js","sourceRoot":"","sources":["../../src/XyoMemoryArchivist.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@xylabs/sdk-js": "^2.6.7",
|
|
13
|
-
"@xyo-network/boundwitness": "^2.28.
|
|
14
|
-
"@xyo-network/module": "^2.28.
|
|
15
|
-
"@xyo-network/payload": "^2.28.
|
|
16
|
-
"@xyo-network/promisable": "^2.28.
|
|
13
|
+
"@xyo-network/boundwitness": "^2.28.1",
|
|
14
|
+
"@xyo-network/module": "^2.28.1",
|
|
15
|
+
"@xyo-network/payload": "^2.28.1",
|
|
16
|
+
"@xyo-network/promisable": "^2.28.1",
|
|
17
17
|
"lodash": "^4.17.21",
|
|
18
18
|
"lru-cache": "^7.14.0",
|
|
19
19
|
"tslib": "^2.4.0"
|
|
20
20
|
},
|
|
21
21
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@xylabs/tsconfig": "^2.5.
|
|
23
|
+
"@xylabs/tsconfig": "^2.5.127"
|
|
24
24
|
},
|
|
25
25
|
"browser": "dist/esm/index.js",
|
|
26
26
|
"docs": "dist/docs.json",
|
|
@@ -55,6 +55,5 @@
|
|
|
55
55
|
},
|
|
56
56
|
"sideEffects": false,
|
|
57
57
|
"types": "dist/esm/index.d.ts",
|
|
58
|
-
"version": "2.28.
|
|
59
|
-
"stableVersion": "2.28.0-rc.2"
|
|
58
|
+
"version": "2.28.1"
|
|
60
59
|
}
|
|
@@ -26,6 +26,12 @@ export type XyoMemoryArchivistConfig = XyoArchivistConfig<{
|
|
|
26
26
|
max?: number
|
|
27
27
|
}>
|
|
28
28
|
|
|
29
|
+
class MemoryArchivistError extends Error {
|
|
30
|
+
constructor(action: string, error: Error['cause'], message?: string) {
|
|
31
|
+
super(`Memory Archivist [${action}] failed${message ? ` (${message})` : ''}`, { cause: error })
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
export class XyoMemoryArchivist extends XyoAbstractArchivist<XyoMemoryArchivistConfig> {
|
|
30
36
|
public get max() {
|
|
31
37
|
return this.config?.max ?? 10000
|
|
@@ -50,16 +56,24 @@ export class XyoMemoryArchivist extends XyoAbstractArchivist<XyoMemoryArchivistC
|
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
public delete(hashes: string[]): PromisableArray<boolean> {
|
|
53
|
-
|
|
54
|
-
return
|
|
55
|
-
|
|
59
|
+
try {
|
|
60
|
+
return hashes.map((hash) => {
|
|
61
|
+
return this.cache.delete(hash)
|
|
62
|
+
})
|
|
63
|
+
} catch (ex) {
|
|
64
|
+
throw new MemoryArchivistError('delete', ex, 'unexpected')
|
|
65
|
+
}
|
|
56
66
|
}
|
|
57
67
|
|
|
58
68
|
public override clear(): void | Promise<void> {
|
|
59
|
-
|
|
69
|
+
try {
|
|
70
|
+
this.cache.clear()
|
|
71
|
+
} catch (ex) {
|
|
72
|
+
throw new MemoryArchivistError('clear', ex, 'unexpected')
|
|
73
|
+
}
|
|
60
74
|
}
|
|
61
75
|
|
|
62
|
-
|
|
76
|
+
protected async getFromParents(hash: string) {
|
|
63
77
|
return compact(
|
|
64
78
|
await Promise.all(
|
|
65
79
|
compact(
|
|
@@ -73,49 +87,69 @@ export class XyoMemoryArchivist extends XyoAbstractArchivist<XyoMemoryArchivistC
|
|
|
73
87
|
}
|
|
74
88
|
|
|
75
89
|
public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
90
|
+
try {
|
|
91
|
+
return await Promise.all(
|
|
92
|
+
hashes.map(async (hash) => {
|
|
93
|
+
return this.cache.get(hash) ?? (await this.getFromParents(hash)) ?? null
|
|
94
|
+
}),
|
|
95
|
+
)
|
|
96
|
+
} catch (ex) {
|
|
97
|
+
throw new MemoryArchivistError('get', ex, 'unexpected')
|
|
98
|
+
}
|
|
81
99
|
}
|
|
82
100
|
|
|
83
101
|
public insert(payloads: XyoPayload[]): PromisableArray<XyoPayload> {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
102
|
+
try {
|
|
103
|
+
return payloads.map((payload) => {
|
|
104
|
+
const wrapper = new XyoPayloadWrapper(payload)
|
|
105
|
+
const payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
|
|
106
|
+
this.cache.set(payloadWithmeta._hash, payloadWithmeta)
|
|
107
|
+
return payloadWithmeta
|
|
108
|
+
})
|
|
109
|
+
} catch (ex) {
|
|
110
|
+
throw new MemoryArchivistError('insert', ex, 'unexpected')
|
|
111
|
+
}
|
|
90
112
|
}
|
|
91
113
|
|
|
92
114
|
public find<R extends XyoPayload = XyoPayload>(filter: XyoPayloadFindFilter): PromisableArray<R> {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
115
|
+
try {
|
|
116
|
+
const result: R[] = []
|
|
117
|
+
this.cache.forEach((value) => {
|
|
118
|
+
if (value.schema === filter.schema) {
|
|
119
|
+
result.push(value as R)
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
return result
|
|
123
|
+
} catch (ex) {
|
|
124
|
+
throw new MemoryArchivistError('find', ex, 'unexpected')
|
|
125
|
+
}
|
|
100
126
|
}
|
|
101
127
|
|
|
102
128
|
public all(): Promise<XyoPayload[]> | XyoPayload[] {
|
|
103
|
-
|
|
129
|
+
try {
|
|
130
|
+
return this.cache.dump().map((value) => value[1].value)
|
|
131
|
+
} catch (ex) {
|
|
132
|
+
throw new MemoryArchivistError('all', ex, 'unexpected')
|
|
133
|
+
}
|
|
104
134
|
}
|
|
105
135
|
|
|
106
136
|
public async commit(): Promise<XyoPayload[]> {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
137
|
+
try {
|
|
138
|
+
const account = assertEx(this.account, 'Account is required for commit')
|
|
139
|
+
const payloads = assertEx(await this.all(), 'Nothing to commit')
|
|
140
|
+
const builder = new XyoBoundWitnessBuilder<XyoBoundWitness, XyoPayload>()
|
|
141
|
+
const block = builder.payloads(payloads).witness(account).build()
|
|
142
|
+
await Promise.allSettled(
|
|
143
|
+
compact(
|
|
144
|
+
Object.values(this.parents?.commit ?? [])?.map(
|
|
145
|
+
async (parent) => await parent?.query({ payloads: [block, ...payloads], schema: XyoArchivistInsertQueryPayloadSchema }),
|
|
146
|
+
),
|
|
115
147
|
),
|
|
116
|
-
)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
148
|
+
)
|
|
149
|
+
await this.clear()
|
|
150
|
+
return payloads
|
|
151
|
+
} catch (ex) {
|
|
152
|
+
throw new MemoryArchivistError('commit', ex, 'unexpected')
|
|
153
|
+
}
|
|
120
154
|
}
|
|
121
155
|
}
|