@xyo-network/archivist 2.34.0 → 2.36.0-rc.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/Archivist.d.ts +2 -2
- package/dist/cjs/Archivist.d.ts.map +1 -1
- package/dist/cjs/Queries/Insert.d.ts +1 -2
- package/dist/cjs/Queries/Insert.d.ts.map +1 -1
- package/dist/cjs/Queries/Insert.js.map +1 -1
- package/dist/cjs/XyoArchivist.d.ts +9 -11
- package/dist/cjs/XyoArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoArchivist.js +31 -21
- package/dist/cjs/XyoArchivist.js.map +1 -1
- package/dist/cjs/XyoArchivistWrapper.d.ts +2 -2
- package/dist/cjs/XyoArchivistWrapper.d.ts.map +1 -1
- package/dist/cjs/XyoArchivistWrapper.js +30 -21
- package/dist/cjs/XyoArchivistWrapper.js.map +1 -1
- package/dist/cjs/XyoCookieArchivist.d.ts +2 -2
- package/dist/cjs/XyoCookieArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoCookieArchivist.js +16 -9
- package/dist/cjs/XyoCookieArchivist.js.map +1 -1
- package/dist/cjs/XyoMemoryArchivist.d.ts +2 -2
- package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoMemoryArchivist.js +19 -12
- package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
- package/dist/cjs/XyoStorageArchivist.d.ts +2 -2
- package/dist/cjs/XyoStorageArchivist.d.ts.map +1 -1
- package/dist/cjs/XyoStorageArchivist.js +17 -10
- package/dist/cjs/XyoStorageArchivist.js.map +1 -1
- package/dist/docs.json +6227 -5252
- package/dist/esm/Archivist.d.ts +2 -2
- package/dist/esm/Archivist.d.ts.map +1 -1
- package/dist/esm/Queries/Insert.d.ts +1 -2
- package/dist/esm/Queries/Insert.d.ts.map +1 -1
- package/dist/esm/Queries/Insert.js.map +1 -1
- package/dist/esm/XyoArchivist.d.ts +9 -11
- package/dist/esm/XyoArchivist.d.ts.map +1 -1
- package/dist/esm/XyoArchivist.js +31 -22
- package/dist/esm/XyoArchivist.js.map +1 -1
- package/dist/esm/XyoArchivistWrapper.d.ts +2 -2
- package/dist/esm/XyoArchivistWrapper.d.ts.map +1 -1
- package/dist/esm/XyoArchivistWrapper.js +29 -21
- package/dist/esm/XyoArchivistWrapper.js.map +1 -1
- package/dist/esm/XyoCookieArchivist.d.ts +2 -2
- package/dist/esm/XyoCookieArchivist.d.ts.map +1 -1
- package/dist/esm/XyoCookieArchivist.js +15 -9
- package/dist/esm/XyoCookieArchivist.js.map +1 -1
- package/dist/esm/XyoMemoryArchivist.d.ts +2 -2
- package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
- package/dist/esm/XyoMemoryArchivist.js +18 -12
- package/dist/esm/XyoMemoryArchivist.js.map +1 -1
- package/dist/esm/XyoStorageArchivist.d.ts +2 -2
- package/dist/esm/XyoStorageArchivist.d.ts.map +1 -1
- package/dist/esm/XyoStorageArchivist.js +16 -10
- package/dist/esm/XyoStorageArchivist.js.map +1 -1
- package/package.json +7 -6
- package/src/Archivist.ts +2 -2
- package/src/Queries/Insert.ts +1 -2
- package/src/XyoArchivist.ts +49 -28
- package/src/XyoArchivistWrapper.ts +32 -25
- package/src/XyoCookieArchivist.ts +19 -11
- package/src/XyoMemoryArchivist.ts +23 -14
- package/src/XyoStorageArchivist.ts +20 -12
- package/src/test.spec.test/testArchivist.ts +13 -8
|
@@ -81,14 +81,16 @@ export class XyoStorageArchivist extends XyoArchivist {
|
|
|
81
81
|
this.storage.set(hash, wrapper.payload);
|
|
82
82
|
return wrapper.payload;
|
|
83
83
|
});
|
|
84
|
-
const
|
|
84
|
+
const result = await this.bindResult([...storedPayloads]);
|
|
85
|
+
const parentBoundWitnesses = [];
|
|
85
86
|
if (this.writeThrough) {
|
|
86
|
-
|
|
87
|
+
//we store the child bw also
|
|
88
|
+
parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...storedPayloads])));
|
|
87
89
|
}
|
|
88
|
-
return
|
|
90
|
+
return [result[0], ...parentBoundWitnesses];
|
|
89
91
|
}
|
|
90
92
|
catch (ex) {
|
|
91
|
-
console.error(`Error: ${
|
|
93
|
+
console.error(`Error: ${ex}`);
|
|
92
94
|
throw new StorageArchivistError('insert', ex, 'unexpected');
|
|
93
95
|
}
|
|
94
96
|
}
|
|
@@ -120,14 +122,18 @@ export class XyoStorageArchivist extends XyoArchivist {
|
|
|
120
122
|
try {
|
|
121
123
|
const payloads = await this.all();
|
|
122
124
|
assertEx(payloads.length > 0, 'Nothing to commit');
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
const settled = await Promise.allSettled(compact(Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
|
|
126
|
+
const queryPayload = PayloadWrapper.parse({
|
|
127
|
+
payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
|
|
128
|
+
schema: XyoArchivistInsertQuerySchema,
|
|
129
|
+
});
|
|
130
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash);
|
|
131
|
+
return (await parent?.query(query[0], query[1]))?.[0];
|
|
128
132
|
})));
|
|
129
133
|
await this.clear();
|
|
130
|
-
return
|
|
134
|
+
return compact(settled.map((result) => {
|
|
135
|
+
return result.status === 'fulfilled' ? result.value : null;
|
|
136
|
+
}));
|
|
131
137
|
}
|
|
132
138
|
catch (ex) {
|
|
133
139
|
console.error(`Error: ${JSON.stringify(ex, null, 2)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XyoStorageArchivist.js","sourceRoot":"","sources":["../../src/XyoStorageArchivist.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"XyoStorageArchivist.js","sourceRoot":"","sources":["../../src/XyoStorageArchivist.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@xylabs/sdk-js": "^2.6.7",
|
|
13
|
-
"@xyo-network/account": "^2.
|
|
14
|
-
"@xyo-network/boundwitness": "^2.
|
|
15
|
-
"@xyo-network/module": "^2.
|
|
16
|
-
"@xyo-network/payload": "^2.
|
|
17
|
-
"@xyo-network/promise": "^2.
|
|
13
|
+
"@xyo-network/account": "^2.36.0-rc.1",
|
|
14
|
+
"@xyo-network/boundwitness": "^2.36.0-rc.1",
|
|
15
|
+
"@xyo-network/module": "^2.36.0-rc.1",
|
|
16
|
+
"@xyo-network/payload": "^2.36.0-rc.1",
|
|
17
|
+
"@xyo-network/promise": "^2.36.0-rc.1",
|
|
18
18
|
"js-cookie": "^3.0.1",
|
|
19
19
|
"lodash": "^4.17.21",
|
|
20
20
|
"lru-cache": "^7.14.0",
|
|
@@ -58,5 +58,6 @@
|
|
|
58
58
|
},
|
|
59
59
|
"sideEffects": false,
|
|
60
60
|
"types": "dist/esm/index.d.ts",
|
|
61
|
-
"version": "2.
|
|
61
|
+
"version": "2.36.0-rc.1",
|
|
62
|
+
"stableVersion": "2.35.0"
|
|
62
63
|
}
|
package/src/Archivist.ts
CHANGED
|
@@ -11,7 +11,7 @@ export interface ReadArchivist<TReadResponse, TId = string> {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export interface WriteArchivist<TReadResponse, TWriteResponse = TReadResponse, TWrite = TReadResponse, TId = string> {
|
|
14
|
-
insert(item: TWrite[]):
|
|
14
|
+
insert(item: TWrite[]): PromisableArray<TWriteResponse>
|
|
15
15
|
delete?(ids: TId[]): PromisableArray<boolean>
|
|
16
16
|
clear?(): Promisable<void>
|
|
17
17
|
}
|
|
@@ -21,7 +21,7 @@ export interface FindArchivist<TReadResponse, TFindResponse = TReadResponse, TFi
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export interface StashArchivist<TWriteResponse> {
|
|
24
|
-
commit?(): Promisable<TWriteResponse>
|
|
24
|
+
commit?(): Promisable<TWriteResponse[]>
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export interface Archivist<
|
package/src/Queries/Insert.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { XyoQuery } from '@xyo-network/module'
|
|
2
|
-
import { XyoPayload } from '@xyo-network/payload'
|
|
3
2
|
|
|
4
3
|
export type XyoArchivistInsertQuerySchema = 'network.xyo.query.archivist.insert'
|
|
5
4
|
export const XyoArchivistInsertQuerySchema: XyoArchivistInsertQuerySchema = 'network.xyo.query.archivist.insert'
|
|
6
5
|
|
|
7
6
|
export type XyoArchivistInsertQuery = XyoQuery<{
|
|
8
7
|
schema: XyoArchivistInsertQuerySchema
|
|
9
|
-
payloads:
|
|
8
|
+
payloads: string[]
|
|
10
9
|
}>
|
package/src/XyoArchivist.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/sdk-js'
|
|
2
2
|
import { XyoAccount } from '@xyo-network/account'
|
|
3
3
|
import { XyoBoundWitness } from '@xyo-network/boundwitness'
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
ModuleQueryResult,
|
|
6
|
+
QueryBoundWitnessWrapper,
|
|
7
|
+
XyoModule,
|
|
8
|
+
XyoModuleInitializeQuerySchema,
|
|
9
|
+
XyoModuleShutdownQuerySchema,
|
|
10
|
+
XyoQueryBoundWitness,
|
|
11
|
+
} from '@xyo-network/module'
|
|
12
|
+
import { PayloadWrapper, XyoPayload, XyoPayloads } from '@xyo-network/payload'
|
|
6
13
|
import { NullablePromisableArray, Promisable, PromisableArray } from '@xyo-network/promise'
|
|
7
14
|
import compact from 'lodash/compact'
|
|
8
15
|
|
|
@@ -52,7 +59,7 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
52
59
|
throw Error('Not implemented')
|
|
53
60
|
}
|
|
54
61
|
|
|
55
|
-
public commit(): Promisable<XyoBoundWitness> {
|
|
62
|
+
public commit(): Promisable<XyoBoundWitness[]> {
|
|
56
63
|
throw Error('Not implemented')
|
|
57
64
|
}
|
|
58
65
|
|
|
@@ -66,40 +73,49 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
66
73
|
|
|
67
74
|
abstract get(hashes: string[]): NullablePromisableArray<XyoPayload>
|
|
68
75
|
|
|
69
|
-
abstract insert(item: XyoPayload[]):
|
|
76
|
+
abstract insert(item: XyoPayload[]): PromisableArray<XyoBoundWitness>
|
|
70
77
|
|
|
71
|
-
override async query<T extends
|
|
72
|
-
|
|
78
|
+
override async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness>(
|
|
79
|
+
query: T,
|
|
80
|
+
payloads?: XyoPayloads,
|
|
81
|
+
): Promise<ModuleQueryResult<XyoPayload>> {
|
|
82
|
+
const wrapper = QueryBoundWitnessWrapper.parseQuery<XyoArchivistQuery>(query, payloads)
|
|
83
|
+
const typedQuery = wrapper.query.payload
|
|
84
|
+
assertEx(this.queryable(typedQuery.schema, wrapper.addresses))
|
|
73
85
|
|
|
74
|
-
const
|
|
86
|
+
const resultPayloads: (XyoPayload | null)[] = []
|
|
75
87
|
const queryAccount = new XyoAccount()
|
|
76
|
-
const typedQuery = query as XyoArchivistQuery
|
|
77
88
|
switch (typedQuery.schema) {
|
|
78
89
|
case XyoArchivistAllQuerySchema:
|
|
79
|
-
|
|
90
|
+
resultPayloads.push(...(await this.all()))
|
|
80
91
|
break
|
|
81
92
|
case XyoArchivistClearQuerySchema:
|
|
82
93
|
await this.clear()
|
|
83
94
|
break
|
|
84
95
|
case XyoArchivistCommitQuerySchema:
|
|
85
|
-
|
|
96
|
+
resultPayloads.push(...(await this.commit()))
|
|
86
97
|
break
|
|
87
98
|
case XyoArchivistDeleteQuerySchema:
|
|
88
99
|
await this.delete(typedQuery.hashes)
|
|
89
100
|
break
|
|
90
101
|
case XyoArchivistFindQuerySchema:
|
|
91
|
-
|
|
102
|
+
resultPayloads.push(...(await this.find(typedQuery.filter)))
|
|
92
103
|
break
|
|
93
104
|
case XyoArchivistGetQuerySchema:
|
|
94
|
-
|
|
105
|
+
resultPayloads.push(...(await this.get(typedQuery.hashes)))
|
|
95
106
|
break
|
|
96
|
-
case XyoArchivistInsertQuerySchema:
|
|
97
|
-
payloads
|
|
107
|
+
case XyoArchivistInsertQuerySchema: {
|
|
108
|
+
const wrappers = payloads?.map((payload) => PayloadWrapper.parse(payload)) ?? []
|
|
109
|
+
assertEx(typedQuery.payloads, `Missing payloads: ${JSON.stringify(typedQuery, null, 2)}`)
|
|
110
|
+
const resolvedWrappers = wrappers.filter((wrapper) => typedQuery.payloads.includes(wrapper.hash))
|
|
111
|
+
assertEx(resolvedWrappers.length === typedQuery.payloads.length, 'Could not find some passed hashes')
|
|
112
|
+
resultPayloads.push(...(await this.insert(resolvedWrappers.map((wrapper) => wrapper.payload))))
|
|
98
113
|
break
|
|
114
|
+
}
|
|
99
115
|
default:
|
|
100
|
-
return super.query(
|
|
116
|
+
return super.query(query)
|
|
101
117
|
}
|
|
102
|
-
return this.
|
|
118
|
+
return this.bindResult(resultPayloads, queryAccount)
|
|
103
119
|
}
|
|
104
120
|
|
|
105
121
|
private resolveArchivists(archivists?: Record<string, PayloadArchivist | null | undefined>) {
|
|
@@ -116,9 +132,9 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
116
132
|
return compact(
|
|
117
133
|
await Promise.all(
|
|
118
134
|
Object.values(this.parents?.read ?? {}).map(async (parent) => {
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
const [, payloads] = (await parent?.query(
|
|
135
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistGetQuery>({ hashes: [hash], schema: XyoArchivistGetQuerySchema })
|
|
136
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
137
|
+
const [, payloads] = (await parent?.query(query[0], query[1])) ?? []
|
|
122
138
|
const wrapper = payloads?.[0] ? new PayloadWrapper(payloads?.[0]) : undefined
|
|
123
139
|
if (wrapper && wrapper.hash !== hash) {
|
|
124
140
|
console.warn(`Parent [${parent?.address}] returned payload with invalid hash [${hash} != ${wrapper.hash}]`)
|
|
@@ -131,17 +147,22 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
|
|
|
131
147
|
}
|
|
132
148
|
|
|
133
149
|
protected async writeToParent(parent: PayloadArchivist, payloads: XyoPayload[]) {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
150
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
|
|
151
|
+
payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
|
|
152
|
+
schema: XyoArchivistInsertQuerySchema,
|
|
153
|
+
})
|
|
154
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
155
|
+
const result = (await parent?.query(query[0], query[1])) ?? []
|
|
156
|
+
return result[0]
|
|
138
157
|
}
|
|
139
158
|
|
|
140
|
-
protected async writeToParents(payloads: XyoPayload[]) {
|
|
141
|
-
return
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
159
|
+
protected async writeToParents(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
|
|
160
|
+
return compact(
|
|
161
|
+
await Promise.all(
|
|
162
|
+
Object.values(this.parents?.write ?? {}).map(async (parent) => {
|
|
163
|
+
return parent ? await this.writeToParent(parent, payloads) : undefined
|
|
164
|
+
}),
|
|
165
|
+
),
|
|
145
166
|
)
|
|
146
167
|
}
|
|
147
168
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { XyoBoundWitness } from '@xyo-network/boundwitness'
|
|
1
|
+
import { XyoBoundWitness, XyoBoundWitnessSchema } from '@xyo-network/boundwitness'
|
|
2
2
|
import { XyoModuleWrapper } from '@xyo-network/module'
|
|
3
|
-
import { XyoPayload } from '@xyo-network/payload'
|
|
3
|
+
import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
|
|
4
4
|
|
|
5
5
|
import { PayloadArchivist } from './Archivist'
|
|
6
6
|
import {
|
|
@@ -23,44 +23,51 @@ import { XyoPayloadFindFilter } from './XyoPayloadFindFilter'
|
|
|
23
23
|
|
|
24
24
|
export class XyoArchivistWrapper extends XyoModuleWrapper implements PayloadArchivist {
|
|
25
25
|
public async delete(hashes: string[]) {
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
26
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistDeleteQuery>({ hashes, schema: XyoArchivistDeleteQuerySchema })
|
|
27
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
28
|
+
await this.module.query(query[0], query[1])
|
|
29
|
+
return (await this.module.query(query[0], query[1]))[0].payload_hashes.map(() => true)
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
public async clear(): Promise<void> {
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
await this.module.query(
|
|
33
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistClearQuery>({ schema: XyoArchivistClearQuerySchema })
|
|
34
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
35
|
+
await this.module.query(query[0], query[1])
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
public async get(hashes: string[]): Promise<(XyoPayload | null)[]> {
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
return (await this.module.query(
|
|
39
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistGetQuery>({ hashes, schema: XyoArchivistGetQuerySchema })
|
|
40
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
41
|
+
return (await this.module.query(query[0], query[1]))[1]
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
|
|
45
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
|
|
46
|
+
payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
|
|
47
|
+
schema: XyoArchivistInsertQuerySchema,
|
|
48
|
+
})
|
|
49
|
+
const query = await this.bindQuery([queryPayload.payload, ...payloads], queryPayload.hash)
|
|
50
|
+
const result = await this.module.query(query[0], [queryPayload.payload, ...payloads])
|
|
51
|
+
const innerBoundWitnesses =
|
|
52
|
+
result[1]?.filter<XyoBoundWitness>((payload): payload is XyoBoundWitness => payload?.schema === XyoBoundWitnessSchema) ?? []
|
|
53
|
+
return [result[0], ...innerBoundWitnesses]
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
public async find(filter?: XyoPayloadFindFilter): Promise<(XyoPayload | null)[]> {
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
return (await this.module.query(
|
|
57
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistFindQuery>({ filter, schema: XyoArchivistFindQuerySchema })
|
|
58
|
+
const query = await this.bindQuery([queryPayload.payload], queryPayload.hash)
|
|
59
|
+
return (await this.module.query(query[0], [queryPayload.payload]))[1]
|
|
53
60
|
}
|
|
54
61
|
|
|
55
62
|
public async all(): Promise<(XyoPayload | null)[]> {
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
return (await this.module.query(
|
|
63
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistAllQuery>({ schema: XyoArchivistAllQuerySchema })
|
|
64
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
65
|
+
return (await this.module.query(query[0], query[1]))[1]
|
|
59
66
|
}
|
|
60
67
|
|
|
61
|
-
public async commit(): Promise<XyoBoundWitness> {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
return (await this.module.query(
|
|
68
|
+
public async commit(): Promise<XyoBoundWitness[]> {
|
|
69
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistCommitQuery>({ schema: XyoArchivistCommitQuerySchema })
|
|
70
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
71
|
+
return (await this.module.query(query[0], query[1]))[1] as XyoBoundWitness[]
|
|
65
72
|
}
|
|
66
73
|
}
|
|
@@ -113,7 +113,7 @@ export class XyoCookieArchivist extends XyoArchivist<XyoCookieArchivistConfig> {
|
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
|
|
116
|
+
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
|
|
117
117
|
try {
|
|
118
118
|
const storedPayloads: XyoPayload[] = payloads.map((payload) => {
|
|
119
119
|
const wrapper = new PayloadWrapper(payload)
|
|
@@ -123,11 +123,13 @@ export class XyoCookieArchivist extends XyoArchivist<XyoCookieArchivistConfig> {
|
|
|
123
123
|
Cookies.set(key, JSON.stringify(wrapper.payload))
|
|
124
124
|
return wrapper.payload
|
|
125
125
|
})
|
|
126
|
-
const
|
|
126
|
+
const result = await this.bindResult([...storedPayloads])
|
|
127
|
+
const parentBoundWitnesses: XyoBoundWitness[] = []
|
|
127
128
|
if (this.writeThrough) {
|
|
128
|
-
|
|
129
|
+
//we store the child bw also
|
|
130
|
+
parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...storedPayloads])))
|
|
129
131
|
}
|
|
130
|
-
return
|
|
132
|
+
return [result[0], ...parentBoundWitnesses]
|
|
131
133
|
} catch (ex) {
|
|
132
134
|
console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
|
|
133
135
|
throw new CookieArchivistError('insert', ex, 'unexpected')
|
|
@@ -160,22 +162,28 @@ export class XyoCookieArchivist extends XyoArchivist<XyoCookieArchivistConfig> {
|
|
|
160
162
|
}
|
|
161
163
|
}
|
|
162
164
|
|
|
163
|
-
public override async commit(): Promise<XyoBoundWitness> {
|
|
165
|
+
public override async commit(): Promise<XyoBoundWitness[]> {
|
|
164
166
|
try {
|
|
165
167
|
const payloads = await this.all()
|
|
166
168
|
assertEx(payloads.length > 0, 'Nothing to commit')
|
|
167
|
-
const
|
|
168
|
-
await Promise.allSettled(
|
|
169
|
+
const settled = await Promise.allSettled(
|
|
169
170
|
compact(
|
|
170
171
|
Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
|
|
173
|
+
payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
|
|
174
|
+
schema: XyoArchivistInsertQuerySchema,
|
|
175
|
+
})
|
|
176
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
177
|
+
return (await parent?.query(query[0], query[1]))?.[0]
|
|
174
178
|
}),
|
|
175
179
|
),
|
|
176
180
|
)
|
|
177
181
|
await this.clear()
|
|
178
|
-
return
|
|
182
|
+
return compact(
|
|
183
|
+
settled.map((result) => {
|
|
184
|
+
return result.status === 'fulfilled' ? result.value : null
|
|
185
|
+
}),
|
|
186
|
+
)
|
|
179
187
|
} catch (ex) {
|
|
180
188
|
console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
|
|
181
189
|
throw new CookieArchivistError('commit', ex, 'unexpected')
|
|
@@ -97,19 +97,22 @@ export class XyoMemoryArchivist extends XyoArchivist<XyoMemoryArchivistConfig> {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
|
|
100
|
+
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
|
|
101
101
|
try {
|
|
102
102
|
payloads.map((payload) => {
|
|
103
103
|
const wrapper = new PayloadWrapper(payload)
|
|
104
|
-
const
|
|
105
|
-
this.cache.set(
|
|
106
|
-
return
|
|
104
|
+
const payloadWithMeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
|
|
105
|
+
this.cache.set(payloadWithMeta._hash, payloadWithMeta)
|
|
106
|
+
return payloadWithMeta
|
|
107
107
|
})
|
|
108
|
-
|
|
108
|
+
|
|
109
|
+
const result = await this.bindResult([...payloads])
|
|
110
|
+
const parentBoundWitnesses: XyoBoundWitness[] = []
|
|
109
111
|
if (this.writeThrough) {
|
|
110
|
-
|
|
112
|
+
//we store the child bw also
|
|
113
|
+
parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...payloads])))
|
|
111
114
|
}
|
|
112
|
-
return
|
|
115
|
+
return [result[0], ...parentBoundWitnesses]
|
|
113
116
|
} catch (ex) {
|
|
114
117
|
console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
|
|
115
118
|
throw new MemoryArchivistError('insert', ex, 'unexpected')
|
|
@@ -140,21 +143,27 @@ export class XyoMemoryArchivist extends XyoArchivist<XyoMemoryArchivistConfig> {
|
|
|
140
143
|
}
|
|
141
144
|
}
|
|
142
145
|
|
|
143
|
-
public override async commit(): Promise<XyoBoundWitness> {
|
|
146
|
+
public override async commit(): Promise<XyoBoundWitness[]> {
|
|
144
147
|
try {
|
|
145
148
|
const payloads = assertEx(await this.all(), 'Nothing to commit')
|
|
146
|
-
const
|
|
147
|
-
await Promise.allSettled(
|
|
149
|
+
const settled = await Promise.allSettled(
|
|
148
150
|
compact(
|
|
149
151
|
Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
152
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
|
|
153
|
+
payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
|
|
154
|
+
schema: XyoArchivistInsertQuerySchema,
|
|
155
|
+
})
|
|
156
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
157
|
+
return (await parent?.query(query[0], query[1]))?.[0]
|
|
153
158
|
}),
|
|
154
159
|
),
|
|
155
160
|
)
|
|
156
161
|
await this.clear()
|
|
157
|
-
return
|
|
162
|
+
return compact(
|
|
163
|
+
settled.map((result) => {
|
|
164
|
+
return result.status === 'fulfilled' ? result.value : null
|
|
165
|
+
}),
|
|
166
|
+
)
|
|
158
167
|
} catch (ex) {
|
|
159
168
|
console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
|
|
160
169
|
throw new MemoryArchivistError('commit', ex, 'unexpected')
|
|
@@ -106,7 +106,7 @@ export class XyoStorageArchivist extends XyoArchivist<XyoStorageArchivistConfig>
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness> {
|
|
109
|
+
public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
|
|
110
110
|
try {
|
|
111
111
|
const storedPayloads = payloads.map((payload) => {
|
|
112
112
|
const wrapper = new PayloadWrapper(payload)
|
|
@@ -116,13 +116,15 @@ export class XyoStorageArchivist extends XyoArchivist<XyoStorageArchivistConfig>
|
|
|
116
116
|
this.storage.set(hash, wrapper.payload)
|
|
117
117
|
return wrapper.payload
|
|
118
118
|
})
|
|
119
|
-
const
|
|
119
|
+
const result = await this.bindResult([...storedPayloads])
|
|
120
|
+
const parentBoundWitnesses: XyoBoundWitness[] = []
|
|
120
121
|
if (this.writeThrough) {
|
|
121
|
-
|
|
122
|
+
//we store the child bw also
|
|
123
|
+
parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...storedPayloads])))
|
|
122
124
|
}
|
|
123
|
-
return
|
|
125
|
+
return [result[0], ...parentBoundWitnesses]
|
|
124
126
|
} catch (ex) {
|
|
125
|
-
console.error(`Error: ${
|
|
127
|
+
console.error(`Error: ${ex}`)
|
|
126
128
|
throw new StorageArchivistError('insert', ex, 'unexpected')
|
|
127
129
|
}
|
|
128
130
|
}
|
|
@@ -151,22 +153,28 @@ export class XyoStorageArchivist extends XyoArchivist<XyoStorageArchivistConfig>
|
|
|
151
153
|
}
|
|
152
154
|
}
|
|
153
155
|
|
|
154
|
-
public override async commit(): Promise<XyoBoundWitness> {
|
|
156
|
+
public override async commit(): Promise<XyoBoundWitness[]> {
|
|
155
157
|
try {
|
|
156
158
|
const payloads = await this.all()
|
|
157
159
|
assertEx(payloads.length > 0, 'Nothing to commit')
|
|
158
|
-
const
|
|
159
|
-
await Promise.allSettled(
|
|
160
|
+
const settled = await Promise.allSettled(
|
|
160
161
|
compact(
|
|
161
162
|
Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
|
|
164
|
+
payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
|
|
165
|
+
schema: XyoArchivistInsertQuerySchema,
|
|
166
|
+
})
|
|
167
|
+
const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
|
|
168
|
+
return (await parent?.query(query[0], query[1]))?.[0]
|
|
165
169
|
}),
|
|
166
170
|
),
|
|
167
171
|
)
|
|
168
172
|
await this.clear()
|
|
169
|
-
return
|
|
173
|
+
return compact(
|
|
174
|
+
settled.map((result) => {
|
|
175
|
+
return result.status === 'fulfilled' ? result.value : null
|
|
176
|
+
}),
|
|
177
|
+
)
|
|
170
178
|
} catch (ex) {
|
|
171
179
|
console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
|
|
172
180
|
throw new StorageArchivistError('commit', ex, 'unexpected')
|
|
@@ -3,22 +3,27 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { delay } from '@xylabs/delay'
|
|
6
|
+
import { BoundWitnessWrapper } from '@xyo-network/boundwitness'
|
|
6
7
|
import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
|
|
7
8
|
|
|
8
9
|
import { XyoArchivist } from '../XyoArchivist'
|
|
9
10
|
import { XyoArchivistWrapper } from '../XyoArchivistWrapper'
|
|
10
11
|
|
|
11
12
|
export const testArchivistRoundTrip = (archivist: XyoArchivist, name: string) => {
|
|
12
|
-
test(`XyoArchivist [${name}]`, async () => {
|
|
13
|
+
test(`XyoArchivist RoundTrip [${name}]`, async () => {
|
|
13
14
|
const idPayload: XyoPayload<{ salt: string }> = {
|
|
14
|
-
salt:
|
|
15
|
+
salt: Date.now().toString(),
|
|
15
16
|
schema: 'network.xyo.id',
|
|
16
17
|
}
|
|
17
18
|
const payloadWrapper = new PayloadWrapper(idPayload)
|
|
19
|
+
|
|
18
20
|
const archivistWrapper = new XyoArchivistWrapper(archivist)
|
|
19
21
|
const insertResult = await archivistWrapper.insert([idPayload])
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
const insertResultWrappers = insertResult.map((bw) => new BoundWitnessWrapper(bw))
|
|
23
|
+
const insertResultPayload = insertResultWrappers.pop() as BoundWitnessWrapper
|
|
24
|
+
expect(insertResultPayload).toBeDefined()
|
|
25
|
+
|
|
26
|
+
expect(insertResultPayload.payloadHashes.find((hash) => hash === payloadWrapper.hash)).toBeDefined()
|
|
22
27
|
const getResult = await archivistWrapper.get([payloadWrapper.hash])
|
|
23
28
|
expect(getResult).toBeDefined()
|
|
24
29
|
expect(getResult.length).toBe(1)
|
|
@@ -31,18 +36,18 @@ export const testArchivistRoundTrip = (archivist: XyoArchivist, name: string) =>
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
export const testArchivistAll = (archivist: XyoArchivist, name: string) => {
|
|
34
|
-
test(`XyoArchivist [${name}]`, async () => {
|
|
39
|
+
test(`XyoArchivist All [${name}]`, async () => {
|
|
35
40
|
const idPayload = {
|
|
36
|
-
salt:
|
|
41
|
+
salt: Date.now().toString(),
|
|
37
42
|
schema: 'network.xyo.id',
|
|
38
43
|
}
|
|
39
44
|
const archivistWrapper = new XyoArchivistWrapper(archivist)
|
|
40
45
|
for (let x = 0; x < 10; x++) {
|
|
41
|
-
await archivistWrapper.insert([
|
|
46
|
+
await archivistWrapper.insert([idPayload])
|
|
42
47
|
await delay(10)
|
|
43
48
|
}
|
|
44
49
|
const getResult = await archivistWrapper.all()
|
|
45
50
|
expect(getResult).toBeDefined()
|
|
46
|
-
expect(getResult.length).toBe(
|
|
51
|
+
expect(getResult.length).toBe(2)
|
|
47
52
|
})
|
|
48
53
|
}
|