@xyo-network/archivist 2.32.0-rc.1 → 2.32.0-rc.4
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/Archivist.d.ts +5 -4
- package/dist/cjs/Archivist.d.ts.map +1 -1
- package/dist/cjs/XyoArchivist.d.ts +26 -5
- package/dist/cjs/XyoArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoArchivist.js +53 -5
- package/dist/cjs/XyoArchivist.js.map +1 -1
- package/dist/cjs/XyoArchivistWrapper.d.ts +3 -2
- package/dist/cjs/XyoArchivistWrapper.d.ts.map +1 -1
- package/dist/cjs/XyoArchivistWrapper.js +2 -2
- package/dist/cjs/XyoArchivistWrapper.js.map +1 -1
- package/dist/cjs/XyoCookieArchivist.d.ts +33 -0
- package/dist/cjs/XyoCookieArchivist.d.ts.map +1 -0
- package/dist/cjs/XyoCookieArchivist.js +158 -0
- package/dist/cjs/XyoCookieArchivist.js.map +1 -0
- package/dist/cjs/XyoMemoryArchivist.d.ts +5 -10
- package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoMemoryArchivist.js +27 -30
- package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
- package/dist/cjs/XyoStorageArchivist.d.ts +33 -0
- package/dist/cjs/XyoStorageArchivist.d.ts.map +1 -0
- package/dist/cjs/XyoStorageArchivist.js +148 -0
- package/dist/cjs/XyoStorageArchivist.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/docs.json +12677 -4302
- package/dist/esm/Archivist.d.ts +5 -4
- package/dist/esm/Archivist.d.ts.map +1 -1
- package/dist/esm/XyoArchivist.d.ts +26 -5
- package/dist/esm/XyoArchivist.d.ts.map +1 -1
- package/dist/esm/XyoArchivist.js +41 -5
- package/dist/esm/XyoArchivist.js.map +1 -1
- package/dist/esm/XyoArchivistWrapper.d.ts +3 -2
- package/dist/esm/XyoArchivistWrapper.d.ts.map +1 -1
- package/dist/esm/XyoArchivistWrapper.js +2 -2
- package/dist/esm/XyoArchivistWrapper.js.map +1 -1
- package/dist/esm/XyoCookieArchivist.d.ts +33 -0
- package/dist/esm/XyoCookieArchivist.d.ts.map +1 -0
- package/dist/esm/XyoCookieArchivist.js +139 -0
- package/dist/esm/XyoCookieArchivist.js.map +1 -0
- package/dist/esm/XyoMemoryArchivist.d.ts +5 -10
- package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
- package/dist/esm/XyoMemoryArchivist.js +17 -18
- package/dist/esm/XyoMemoryArchivist.js.map +1 -1
- package/dist/esm/XyoStorageArchivist.d.ts +33 -0
- package/dist/esm/XyoStorageArchivist.d.ts.map +1 -0
- package/dist/esm/XyoStorageArchivist.js +130 -0
- package/dist/esm/XyoStorageArchivist.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +10 -5
- package/src/Archivist.ts +6 -5
- package/src/XyoArchivist.ts +58 -9
- package/src/XyoArchivistWrapper.ts +5 -4
- package/src/XyoCookieArchivist.spec.ts +9 -0
- package/src/XyoCookieArchivist.ts +176 -0
- package/src/XyoMemoryArchivist.ts +19 -28
- package/src/XyoStorageArchivist.spec.ts +14 -0
- package/src/XyoStorageArchivist.ts +167 -0
- package/src/index.ts +3 -0
- package/src/test.spec.test/index.ts +1 -0
- package/src/test.spec.test/testArchivist.ts +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XyoStorageArchivist.d.ts","sourceRoot":"","sources":["../../src/XyoStorageArchivist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAUjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAE7D,oBAAY,+BAA+B,GAAG,6CAA6C,CAAA;AAC3F,eAAO,MAAM,+BAA+B,EAAE,+BAA+E,CAAA;AAE7H,oBAAY,yBAAyB,GAAG,kBAAkB,CAAC;IACzD,MAAM,EAAE,+BAA+B,CAAA;IACvC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAQF,qBAAa,mBAAoB,SAAQ,YAAY,CAAC,yBAAyB,CAAC;IAC9E,IAAW,IAAI,iCAEd;IAED,IAAW,SAAS,WAEnB;IAED,IAAW,UAAU,WAEpB;IAED,IAAW,YAAY,WAEtB;IAEe,OAAO;IAWvB,OAAO,CAAC,OAAO,CAAW;gBAEd,MAAM,CAAC,EAAE,sBAAsB,CAAC,yBAAyB,CAAC;IAK/D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC;IAWzC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC;IAarD,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAoBxD,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAc/D,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC;IAQ5B,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;CAmBhD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/sdk-js';
|
|
2
|
+
import { XyoPayloadWrapper } from '@xyo-network/payload';
|
|
3
|
+
import compact from 'lodash/compact';
|
|
4
|
+
import store from 'store2';
|
|
5
|
+
import { XyoArchivistAllQuerySchema, XyoArchivistClearQuerySchema, XyoArchivistCommitQuerySchema, XyoArchivistDeleteQuerySchema, XyoArchivistFindQuerySchema, XyoArchivistInsertQuerySchema, } from './Queries';
|
|
6
|
+
import { XyoArchivist } from './XyoArchivist';
|
|
7
|
+
export const XyoStorageArchivistConfigSchema = 'network.xyo.module.config.archivist.storage';
|
|
8
|
+
class StorageArchivistError extends Error {
|
|
9
|
+
constructor(action, error, message) {
|
|
10
|
+
super(`Storage Archivist [${action}] failed${message ? ` (${message})` : ''}`, { cause: error });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class XyoStorageArchivist extends XyoArchivist {
|
|
14
|
+
get type() {
|
|
15
|
+
return this.config?.type ?? 'local';
|
|
16
|
+
}
|
|
17
|
+
get namespace() {
|
|
18
|
+
return this.config?.namespace ?? 'xyoarch';
|
|
19
|
+
}
|
|
20
|
+
get maxEntries() {
|
|
21
|
+
return this.config?.maxEntries ?? 1000;
|
|
22
|
+
}
|
|
23
|
+
get maxEntrySize() {
|
|
24
|
+
return this.config?.maxEntries ?? 16000;
|
|
25
|
+
}
|
|
26
|
+
queries() {
|
|
27
|
+
return [
|
|
28
|
+
XyoArchivistAllQuerySchema,
|
|
29
|
+
XyoArchivistDeleteQuerySchema,
|
|
30
|
+
XyoArchivistClearQuerySchema,
|
|
31
|
+
XyoArchivistFindQuerySchema,
|
|
32
|
+
XyoArchivistCommitQuerySchema,
|
|
33
|
+
...super.queries(),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
storage;
|
|
37
|
+
constructor(config) {
|
|
38
|
+
super({ ...config, schema: XyoStorageArchivistConfigSchema });
|
|
39
|
+
this.storage = store[this.type].namespace(this.namespace);
|
|
40
|
+
}
|
|
41
|
+
delete(hashes) {
|
|
42
|
+
try {
|
|
43
|
+
return hashes.map((hash) => {
|
|
44
|
+
this.storage.remove(hash);
|
|
45
|
+
return true;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (ex) {
|
|
49
|
+
throw new StorageArchivistError('delete', ex, 'unexpected');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
clear() {
|
|
53
|
+
try {
|
|
54
|
+
this.storage.clear();
|
|
55
|
+
}
|
|
56
|
+
catch (ex) {
|
|
57
|
+
throw new StorageArchivistError('clear', ex, 'unexpected');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async get(hashes) {
|
|
61
|
+
try {
|
|
62
|
+
return await Promise.all(hashes.map(async (hash) => {
|
|
63
|
+
const value = this.storage.get(hash);
|
|
64
|
+
return value ?? (await this.getFromParents(hash)) ?? null;
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
catch (ex) {
|
|
68
|
+
throw new StorageArchivistError('get', ex, 'unexpected');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async insert(payloads) {
|
|
72
|
+
try {
|
|
73
|
+
const storedPayloads = payloads.map((payload) => {
|
|
74
|
+
const wrapper = new XyoPayloadWrapper(payload);
|
|
75
|
+
const hash = wrapper.hash;
|
|
76
|
+
const value = JSON.stringify(wrapper.payload);
|
|
77
|
+
assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hash}, ${value.length}]`);
|
|
78
|
+
this.storage.set(hash, wrapper.payload);
|
|
79
|
+
return wrapper.payload;
|
|
80
|
+
});
|
|
81
|
+
const boundwitness = this.bindPayloads(storedPayloads);
|
|
82
|
+
if (this.writeThrough) {
|
|
83
|
+
await this.writeToParents([boundwitness, ...storedPayloads]);
|
|
84
|
+
}
|
|
85
|
+
return boundwitness;
|
|
86
|
+
}
|
|
87
|
+
catch (ex) {
|
|
88
|
+
throw new StorageArchivistError('insert', ex, 'unexpected');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async find(filter) {
|
|
92
|
+
try {
|
|
93
|
+
const x = (await this.all()).filter((payload) => {
|
|
94
|
+
if (filter.schema && filter.schema !== payload.schema) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
});
|
|
99
|
+
return x;
|
|
100
|
+
}
|
|
101
|
+
catch (ex) {
|
|
102
|
+
throw new StorageArchivistError('find', ex, 'unexpected');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
all() {
|
|
106
|
+
try {
|
|
107
|
+
return Object.entries(this.storage.getAll()).map(([, value]) => value);
|
|
108
|
+
}
|
|
109
|
+
catch (ex) {
|
|
110
|
+
throw new StorageArchivistError('all', ex, 'unexpected');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async commit() {
|
|
114
|
+
try {
|
|
115
|
+
const payloads = await this.all();
|
|
116
|
+
assertEx(payloads.length > 0, 'Nothing to commit');
|
|
117
|
+
const block = this.bindPayloads(payloads);
|
|
118
|
+
await Promise.allSettled(compact(Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
|
|
119
|
+
const query = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema };
|
|
120
|
+
return await parent?.query(query);
|
|
121
|
+
})));
|
|
122
|
+
await this.clear();
|
|
123
|
+
return block;
|
|
124
|
+
}
|
|
125
|
+
catch (ex) {
|
|
126
|
+
throw new StorageArchivistError('commit', ex, 'unexpected');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=XyoStorageArchivist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XyoStorageArchivist.js","sourceRoot":"","sources":["../../src/XyoStorageArchivist.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export * from './Archivist';
|
|
2
2
|
export * from './Config';
|
|
3
|
+
export * from './PartialArchivistConfig';
|
|
3
4
|
export * from './Queries';
|
|
4
5
|
export * from './XyoArchivist';
|
|
5
6
|
export * from './XyoArchivistWrapper';
|
|
7
|
+
export * from './XyoCookieArchivist';
|
|
6
8
|
export * from './XyoMemoryArchivist';
|
|
7
9
|
export * from './XyoPayloadFindFilter';
|
|
10
|
+
export * from './XyoStorageArchivist';
|
|
8
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,0BAA0B,CAAA;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export * from './Archivist';
|
|
2
2
|
export * from './Config';
|
|
3
|
+
export * from './PartialArchivistConfig';
|
|
3
4
|
export * from './Queries';
|
|
4
5
|
export * from './XyoArchivist';
|
|
5
6
|
export * from './XyoArchivistWrapper';
|
|
7
|
+
export * from './XyoCookieArchivist';
|
|
6
8
|
export * from './XyoMemoryArchivist';
|
|
7
9
|
export * from './XyoPayloadFindFilter';
|
|
10
|
+
export * from './XyoStorageArchivist';
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,0BAA0B,CAAA;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA"}
|
package/package.json
CHANGED
|
@@ -10,14 +10,19 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@xylabs/sdk-js": "^2.6.7",
|
|
13
|
-
"@xyo-network/boundwitness": "^2.32.0-rc.
|
|
14
|
-
"@xyo-network/module": "^2.32.0-rc.
|
|
15
|
-
"@xyo-network/payload": "^2.32.0-rc.
|
|
16
|
-
"@xyo-network/promisable": "^2.32.0-rc.
|
|
13
|
+
"@xyo-network/boundwitness": "^2.32.0-rc.4",
|
|
14
|
+
"@xyo-network/module": "^2.32.0-rc.4",
|
|
15
|
+
"@xyo-network/payload": "^2.32.0-rc.4",
|
|
16
|
+
"@xyo-network/promisable": "^2.32.0-rc.4",
|
|
17
|
+
"js-cookie": "^3.0.1",
|
|
17
18
|
"lodash": "^4.17.21",
|
|
18
19
|
"lru-cache": "^7.14.0",
|
|
20
|
+
"store2": "^2.14.2",
|
|
19
21
|
"tslib": "^2.4.0"
|
|
20
22
|
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/js-cookie": "^3.0.2"
|
|
25
|
+
},
|
|
21
26
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
22
27
|
"browser": "dist/esm/index.js",
|
|
23
28
|
"docs": "dist/docs.json",
|
|
@@ -52,6 +57,6 @@
|
|
|
52
57
|
},
|
|
53
58
|
"sideEffects": false,
|
|
54
59
|
"types": "dist/esm/index.d.ts",
|
|
55
|
-
"version": "2.32.0-rc.
|
|
60
|
+
"version": "2.32.0-rc.4",
|
|
56
61
|
"stableVersion": "2.31.5"
|
|
57
62
|
}
|
package/src/Archivist.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { XyoBoundWitness } from '@xyo-network/boundwitness'
|
|
1
2
|
import { Module } from '@xyo-network/module'
|
|
2
3
|
import { XyoPayload } from '@xyo-network/payload'
|
|
3
4
|
import { NullablePromisableArray, Promisable, PromisableArray } from '@xyo-network/promisable'
|
|
@@ -17,7 +18,7 @@ export interface WriteArchivist<
|
|
|
17
18
|
TId = string,
|
|
18
19
|
TQuery extends XyoArchivistQuery = XyoArchivistQuery,
|
|
19
20
|
> extends Module<TQuery> {
|
|
20
|
-
insert(item: TWrite[]):
|
|
21
|
+
insert(item: TWrite[]): Promisable<TWriteResponse>
|
|
21
22
|
delete?(ids: TId[]): PromisableArray<boolean>
|
|
22
23
|
clear?(): Promisable<void>
|
|
23
24
|
}
|
|
@@ -31,13 +32,13 @@ export interface FindArchivist<
|
|
|
31
32
|
find(filter: TFindFilter): PromisableArray<TFindResponse>
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
export interface StashArchivist<
|
|
35
|
-
commit?():
|
|
35
|
+
export interface StashArchivist<TWriteResponse, TQuery extends XyoArchivistQuery = XyoArchivistQuery> extends Module<TQuery> {
|
|
36
|
+
commit?(): Promisable<TWriteResponse>
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
export interface Archivist<
|
|
39
40
|
TReadResponse = XyoPayload | null,
|
|
40
|
-
TWriteResponse =
|
|
41
|
+
TWriteResponse = XyoBoundWitness | null,
|
|
41
42
|
TWrite = TReadResponse,
|
|
42
43
|
TFindResponse = TReadResponse | null,
|
|
43
44
|
TFindFilter = XyoPayloadFindFilter,
|
|
@@ -46,4 +47,4 @@ export interface Archivist<
|
|
|
46
47
|
> extends ReadArchivist<TReadResponse, TId, TQuery>,
|
|
47
48
|
FindArchivist<TReadResponse, TFindResponse, TFindFilter, TQuery>,
|
|
48
49
|
WriteArchivist<TReadResponse, TWriteResponse, TWrite, TId, TQuery>,
|
|
49
|
-
StashArchivist<
|
|
50
|
+
StashArchivist<TWriteResponse, TQuery> {}
|
package/src/XyoArchivist.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
+
import { XyoBoundWitness } from '@xyo-network/boundwitness'
|
|
2
3
|
import { Module, XyoModule, XyoModuleInitializeQuerySchema, XyoModuleQueryResult, XyoModuleShutdownQuerySchema } from '@xyo-network/module'
|
|
3
|
-
import { XyoPayload } from '@xyo-network/payload'
|
|
4
|
+
import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
|
|
4
5
|
import { NullablePromisableArray, Promisable, PromisableArray } from '@xyo-network/promisable'
|
|
6
|
+
import compact from 'lodash/compact'
|
|
5
7
|
|
|
6
8
|
import { Archivist } from './Archivist'
|
|
7
9
|
import { XyoArchivistConfig, XyoArchivistParents } from './Config'
|
|
@@ -11,7 +13,9 @@ import {
|
|
|
11
13
|
XyoArchivistCommitQuerySchema,
|
|
12
14
|
XyoArchivistDeleteQuerySchema,
|
|
13
15
|
XyoArchivistFindQuerySchema,
|
|
16
|
+
XyoArchivistGetQuery,
|
|
14
17
|
XyoArchivistGetQuerySchema,
|
|
18
|
+
XyoArchivistInsertQuery,
|
|
15
19
|
XyoArchivistInsertQuerySchema,
|
|
16
20
|
XyoArchivistQuery,
|
|
17
21
|
XyoArchivistQuerySchema,
|
|
@@ -19,11 +23,25 @@ import {
|
|
|
19
23
|
import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
|
|
20
24
|
|
|
21
25
|
export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
22
|
-
extends XyoModule<XyoArchivistConfig<TConfig
|
|
26
|
+
extends XyoModule<XyoArchivistConfig<TConfig>, XyoArchivistQuery>
|
|
23
27
|
implements Archivist<XyoPayload, XyoPayload, XyoPayload, XyoPayload, XyoPayloadFindFilter>
|
|
24
28
|
{
|
|
25
|
-
public override
|
|
26
|
-
return [
|
|
29
|
+
public override queries(): XyoArchivistQuerySchema[] {
|
|
30
|
+
return [
|
|
31
|
+
XyoModuleInitializeQuerySchema,
|
|
32
|
+
XyoModuleShutdownQuerySchema,
|
|
33
|
+
XyoArchivistGetQuerySchema,
|
|
34
|
+
XyoArchivistInsertQuerySchema,
|
|
35
|
+
...super.queries(),
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public get cacheParentReads() {
|
|
40
|
+
return !!this.config?.cacheParentReads
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public get writeThrough() {
|
|
44
|
+
return !!this.config?.writeThrough
|
|
27
45
|
}
|
|
28
46
|
|
|
29
47
|
public all(): PromisableArray<XyoPayload> {
|
|
@@ -34,7 +52,7 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
34
52
|
throw Error('Not implemented')
|
|
35
53
|
}
|
|
36
54
|
|
|
37
|
-
public commit():
|
|
55
|
+
public commit(): Promisable<XyoBoundWitness> {
|
|
38
56
|
throw Error('Not implemented')
|
|
39
57
|
}
|
|
40
58
|
|
|
@@ -48,10 +66,10 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
48
66
|
|
|
49
67
|
abstract get(hashes: string[]): NullablePromisableArray<XyoPayload>
|
|
50
68
|
|
|
51
|
-
abstract insert(item: XyoPayload[]):
|
|
69
|
+
abstract insert(item: XyoPayload[]): Promisable<XyoBoundWitness>
|
|
52
70
|
|
|
53
71
|
async query(query: XyoArchivistQuery): Promise<XyoModuleQueryResult> {
|
|
54
|
-
if (!this.queries.find((schema) => schema === query.schema)) {
|
|
72
|
+
if (!this.queries().find((schema) => schema === query.schema)) {
|
|
55
73
|
console.error(`Undeclared Module Query: ${query.schema}`)
|
|
56
74
|
}
|
|
57
75
|
|
|
@@ -64,7 +82,7 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
64
82
|
await this.clear()
|
|
65
83
|
break
|
|
66
84
|
case XyoArchivistCommitQuerySchema:
|
|
67
|
-
payloads.push(
|
|
85
|
+
payloads.push(await this.commit())
|
|
68
86
|
break
|
|
69
87
|
case XyoArchivistDeleteQuerySchema:
|
|
70
88
|
await this.delete(query.hashes)
|
|
@@ -76,7 +94,7 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
76
94
|
payloads.push(...(await this.get(query.hashes)))
|
|
77
95
|
break
|
|
78
96
|
case XyoArchivistInsertQuerySchema:
|
|
79
|
-
payloads.push(
|
|
97
|
+
payloads.push(await this.insert(query.payloads), ...query.payloads)
|
|
80
98
|
break
|
|
81
99
|
}
|
|
82
100
|
return [this.bindPayloads(payloads), payloads]
|
|
@@ -92,6 +110,37 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
92
110
|
return resolved
|
|
93
111
|
}
|
|
94
112
|
|
|
113
|
+
protected async getFromParents(hash: string) {
|
|
114
|
+
return compact(
|
|
115
|
+
await Promise.all(
|
|
116
|
+
Object.values(this.parents?.read ?? {}).map(async (parent) => {
|
|
117
|
+
const query: XyoArchivistGetQuery = { hashes: [hash], schema: XyoArchivistGetQuerySchema }
|
|
118
|
+
const [, payloads] = (await parent?.query(query)) ?? []
|
|
119
|
+
const wrapper = payloads?.[0] ? new XyoPayloadWrapper(payloads?.[0]) : undefined
|
|
120
|
+
if (wrapper && wrapper.hash !== hash) {
|
|
121
|
+
console.warn(`Parent [${parent?.address}] returned payload with invalid hash [${hash} != ${wrapper.hash}]`)
|
|
122
|
+
return null
|
|
123
|
+
}
|
|
124
|
+
return wrapper?.payload
|
|
125
|
+
}),
|
|
126
|
+
),
|
|
127
|
+
)[0]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
protected async writeToParent(parent: Module, payloads: XyoPayload[]) {
|
|
131
|
+
const query: XyoArchivistInsertQuery = { payloads, schema: XyoArchivistInsertQuerySchema }
|
|
132
|
+
const [, writtenPayloads] = (await parent?.query(query)) ?? []
|
|
133
|
+
return writtenPayloads
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
protected async writeToParents(payloads: XyoPayload[]) {
|
|
137
|
+
return await Promise.all(
|
|
138
|
+
Object.values(this.parents?.write ?? {}).map(async (parent) => {
|
|
139
|
+
return parent ? await this.writeToParent(parent, payloads) : undefined
|
|
140
|
+
}),
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
|
|
95
144
|
private _parents?: XyoArchivistParents
|
|
96
145
|
get parents() {
|
|
97
146
|
this._parents = this._parents ?? {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { XyoBoundWitness } from '@xyo-network/boundwitness'
|
|
1
2
|
import { XyoModuleWrapper } from '@xyo-network/module'
|
|
2
3
|
import { XyoPayload } from '@xyo-network/payload'
|
|
3
4
|
|
|
@@ -36,9 +37,9 @@ export class XyoArchivistWrapper extends XyoModuleWrapper implements Archivist {
|
|
|
36
37
|
return (await this.module.query(query))[1]
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
public async insert(payloads: XyoPayload[]): Promise<
|
|
40
|
+
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
|
|
40
41
|
const query: XyoArchivistInsertQuery = { payloads, schema: XyoArchivistInsertQuerySchema }
|
|
41
|
-
return (await this.module.query(query))[
|
|
42
|
+
return (await this.module.query(query))[0]
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
public async find(filter: XyoPayloadFindFilter): Promise<(XyoPayload | null)[]> {
|
|
@@ -51,8 +52,8 @@ export class XyoArchivistWrapper extends XyoModuleWrapper implements Archivist {
|
|
|
51
52
|
return (await this.module.query(query))[1]
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
public async commit(): Promise<
|
|
55
|
+
public async commit(): Promise<XyoBoundWitness> {
|
|
55
56
|
const query: XyoArchivistCommitQuery = { schema: XyoArchivistCommitQuerySchema }
|
|
56
|
-
return (await this.module.query(query))[
|
|
57
|
+
return (await this.module.query(query))[0]
|
|
57
58
|
}
|
|
58
59
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { testArchivistAll, testArchivistRoundTrip } from './test.spec.test'
|
|
6
|
+
import { XyoCookieArchivist } from './XyoCookieArchivist'
|
|
7
|
+
|
|
8
|
+
testArchivistRoundTrip(new XyoCookieArchivist({ namespace: 'test' }), 'cookie')
|
|
9
|
+
testArchivistAll(new XyoCookieArchivist({ namespace: 'test' }), 'cookie')
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/sdk-js'
|
|
2
|
+
import { XyoBoundWitness } from '@xyo-network/boundwitness'
|
|
3
|
+
import { XyoPayload, XyoPayloadWrapper } from '@xyo-network/payload'
|
|
4
|
+
import { PromisableArray } from '@xyo-network/promisable'
|
|
5
|
+
import Cookies from 'js-cookie'
|
|
6
|
+
import compact from 'lodash/compact'
|
|
7
|
+
|
|
8
|
+
import { XyoArchivistConfig } from './Config'
|
|
9
|
+
import { PartialArchivistConfig } from './PartialArchivistConfig'
|
|
10
|
+
import {
|
|
11
|
+
XyoArchivistAllQuerySchema,
|
|
12
|
+
XyoArchivistClearQuerySchema,
|
|
13
|
+
XyoArchivistCommitQuerySchema,
|
|
14
|
+
XyoArchivistDeleteQuerySchema,
|
|
15
|
+
XyoArchivistFindQuerySchema,
|
|
16
|
+
XyoArchivistInsertQuery,
|
|
17
|
+
XyoArchivistInsertQuerySchema,
|
|
18
|
+
} from './Queries'
|
|
19
|
+
import { XyoArchivist } from './XyoArchivist'
|
|
20
|
+
import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
|
|
21
|
+
|
|
22
|
+
export type XyoCookieArchivistConfigSchema = 'network.xyo.module.config.archivist.cookie'
|
|
23
|
+
export const XyoCookieArchivistConfigSchema: XyoCookieArchivistConfigSchema = 'network.xyo.module.config.archivist.cookie'
|
|
24
|
+
|
|
25
|
+
export type XyoCookieArchivistConfig = XyoArchivistConfig<{
|
|
26
|
+
schema: XyoCookieArchivistConfigSchema
|
|
27
|
+
domain?: string
|
|
28
|
+
maxEntries?: number
|
|
29
|
+
maxEntrySize?: number
|
|
30
|
+
namespace?: string
|
|
31
|
+
}>
|
|
32
|
+
|
|
33
|
+
class CookieArchivistError extends Error {
|
|
34
|
+
constructor(action: string, error: Error['cause'], message?: string) {
|
|
35
|
+
super(`Cookie Archivist [${action}] failed${message ? ` (${message})` : ''}`, { cause: error })
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export class XyoCookieArchivist extends XyoArchivist<XyoCookieArchivistConfig> {
|
|
40
|
+
public get domain() {
|
|
41
|
+
return this.config?.domain
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public get namespace() {
|
|
45
|
+
return this.config?.namespace ?? 'xyoarch'
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public get maxEntries() {
|
|
49
|
+
//all browsers support at least 60 cookies
|
|
50
|
+
return this.config?.maxEntries ?? 60
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public get maxEntrySize() {
|
|
54
|
+
//all browsers support at least 4000 length per cookie
|
|
55
|
+
return this.config?.maxEntrySize ?? 4000
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public override queries() {
|
|
59
|
+
return [
|
|
60
|
+
XyoArchivistAllQuerySchema,
|
|
61
|
+
XyoArchivistDeleteQuerySchema,
|
|
62
|
+
XyoArchivistClearQuerySchema,
|
|
63
|
+
XyoArchivistFindQuerySchema,
|
|
64
|
+
XyoArchivistCommitQuerySchema,
|
|
65
|
+
...super.queries(),
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
constructor(config?: PartialArchivistConfig<XyoCookieArchivistConfig>) {
|
|
70
|
+
super({ ...config, schema: XyoCookieArchivistConfigSchema })
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private keyFromHash(hash: string) {
|
|
74
|
+
return `${this.namespace}-${hash}`
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public delete(hashes: string[]): PromisableArray<boolean> {
|
|
78
|
+
try {
|
|
79
|
+
return hashes.map((hash) => {
|
|
80
|
+
Cookies.remove(this.keyFromHash(hash))
|
|
81
|
+
return true
|
|
82
|
+
})
|
|
83
|
+
} catch (ex) {
|
|
84
|
+
throw new CookieArchivistError('delete', ex, 'unexpected')
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public override clear(): void | Promise<void> {
|
|
89
|
+
try {
|
|
90
|
+
Object.entries(Cookies.get()).map(([key]) => {
|
|
91
|
+
if (key.startsWith(`${this.namespace}-`)) {
|
|
92
|
+
Cookies.remove(key)
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
} catch (ex) {
|
|
96
|
+
throw new CookieArchivistError('clear', ex, 'unexpected')
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
|
|
101
|
+
try {
|
|
102
|
+
return await Promise.all(
|
|
103
|
+
hashes.map(async (hash) => {
|
|
104
|
+
const cookieString = Cookies.get(this.keyFromHash(hash))
|
|
105
|
+
return cookieString ? JSON.parse(cookieString) : (await this.getFromParents(hash)) ?? null
|
|
106
|
+
}),
|
|
107
|
+
)
|
|
108
|
+
} catch (ex) {
|
|
109
|
+
throw new CookieArchivistError('get', ex, 'unexpected')
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
|
|
114
|
+
try {
|
|
115
|
+
const storedPayloads = payloads.map((payload) => {
|
|
116
|
+
const wrapper = new XyoPayloadWrapper(payload)
|
|
117
|
+
const key = this.keyFromHash(wrapper.hash)
|
|
118
|
+
const value = JSON.stringify(wrapper.payload)
|
|
119
|
+
assertEx(value.length < this.maxEntrySize, `Payload too large [${wrapper.hash}, ${value.length}]`)
|
|
120
|
+
Cookies.set(key, JSON.stringify(wrapper.payload))
|
|
121
|
+
return wrapper.payload
|
|
122
|
+
})
|
|
123
|
+
const boundwitness = this.bindPayloads(storedPayloads)
|
|
124
|
+
if (this.writeThrough) {
|
|
125
|
+
await this.writeToParents([boundwitness, ...storedPayloads])
|
|
126
|
+
}
|
|
127
|
+
return boundwitness
|
|
128
|
+
} catch (ex) {
|
|
129
|
+
throw new CookieArchivistError('insert', ex, 'unexpected')
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
public async find(filter: XyoPayloadFindFilter): Promise<XyoPayload[]> {
|
|
134
|
+
try {
|
|
135
|
+
const x = (await this.all()).filter((payload) => {
|
|
136
|
+
if (filter.schema && filter.schema !== payload.schema) {
|
|
137
|
+
return false
|
|
138
|
+
}
|
|
139
|
+
return true
|
|
140
|
+
})
|
|
141
|
+
return x
|
|
142
|
+
} catch (ex) {
|
|
143
|
+
throw new CookieArchivistError('find', ex, 'unexpected')
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
public all(): PromisableArray<XyoPayload> {
|
|
148
|
+
try {
|
|
149
|
+
return Object.entries(Cookies.get())
|
|
150
|
+
.filter(([key]) => key.startsWith(`${this.namespace}-`))
|
|
151
|
+
.map(([, value]) => JSON.parse(value))
|
|
152
|
+
} catch (ex) {
|
|
153
|
+
throw new CookieArchivistError('all', ex, 'unexpected')
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public async commit(): Promise<XyoBoundWitness> {
|
|
158
|
+
try {
|
|
159
|
+
const payloads = await this.all()
|
|
160
|
+
assertEx(payloads.length > 0, 'Nothing to commit')
|
|
161
|
+
const block = this.bindPayloads(payloads)
|
|
162
|
+
await Promise.allSettled(
|
|
163
|
+
compact(
|
|
164
|
+
Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
|
|
165
|
+
const query: XyoArchivistInsertQuery = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema }
|
|
166
|
+
return await parent?.query(query)
|
|
167
|
+
}),
|
|
168
|
+
),
|
|
169
|
+
)
|
|
170
|
+
await this.clear()
|
|
171
|
+
return block
|
|
172
|
+
} catch (ex) {
|
|
173
|
+
throw new CookieArchivistError('commit', ex, 'unexpected')
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|