@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.
Files changed (60) hide show
  1. package/dist/cjs/Archivist.d.ts +2 -2
  2. package/dist/cjs/Archivist.d.ts.map +1 -1
  3. package/dist/cjs/Queries/Insert.d.ts +1 -2
  4. package/dist/cjs/Queries/Insert.d.ts.map +1 -1
  5. package/dist/cjs/Queries/Insert.js.map +1 -1
  6. package/dist/cjs/XyoArchivist.d.ts +9 -11
  7. package/dist/cjs/XyoArchivist.d.ts.map +1 -1
  8. package/dist/cjs/XyoArchivist.js +31 -21
  9. package/dist/cjs/XyoArchivist.js.map +1 -1
  10. package/dist/cjs/XyoArchivistWrapper.d.ts +2 -2
  11. package/dist/cjs/XyoArchivistWrapper.d.ts.map +1 -1
  12. package/dist/cjs/XyoArchivistWrapper.js +30 -21
  13. package/dist/cjs/XyoArchivistWrapper.js.map +1 -1
  14. package/dist/cjs/XyoCookieArchivist.d.ts +2 -2
  15. package/dist/cjs/XyoCookieArchivist.d.ts.map +1 -1
  16. package/dist/cjs/XyoCookieArchivist.js +16 -9
  17. package/dist/cjs/XyoCookieArchivist.js.map +1 -1
  18. package/dist/cjs/XyoMemoryArchivist.d.ts +2 -2
  19. package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
  20. package/dist/cjs/XyoMemoryArchivist.js +19 -12
  21. package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
  22. package/dist/cjs/XyoStorageArchivist.d.ts +2 -2
  23. package/dist/cjs/XyoStorageArchivist.d.ts.map +1 -1
  24. package/dist/cjs/XyoStorageArchivist.js +17 -10
  25. package/dist/cjs/XyoStorageArchivist.js.map +1 -1
  26. package/dist/docs.json +6227 -5252
  27. package/dist/esm/Archivist.d.ts +2 -2
  28. package/dist/esm/Archivist.d.ts.map +1 -1
  29. package/dist/esm/Queries/Insert.d.ts +1 -2
  30. package/dist/esm/Queries/Insert.d.ts.map +1 -1
  31. package/dist/esm/Queries/Insert.js.map +1 -1
  32. package/dist/esm/XyoArchivist.d.ts +9 -11
  33. package/dist/esm/XyoArchivist.d.ts.map +1 -1
  34. package/dist/esm/XyoArchivist.js +31 -22
  35. package/dist/esm/XyoArchivist.js.map +1 -1
  36. package/dist/esm/XyoArchivistWrapper.d.ts +2 -2
  37. package/dist/esm/XyoArchivistWrapper.d.ts.map +1 -1
  38. package/dist/esm/XyoArchivistWrapper.js +29 -21
  39. package/dist/esm/XyoArchivistWrapper.js.map +1 -1
  40. package/dist/esm/XyoCookieArchivist.d.ts +2 -2
  41. package/dist/esm/XyoCookieArchivist.d.ts.map +1 -1
  42. package/dist/esm/XyoCookieArchivist.js +15 -9
  43. package/dist/esm/XyoCookieArchivist.js.map +1 -1
  44. package/dist/esm/XyoMemoryArchivist.d.ts +2 -2
  45. package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
  46. package/dist/esm/XyoMemoryArchivist.js +18 -12
  47. package/dist/esm/XyoMemoryArchivist.js.map +1 -1
  48. package/dist/esm/XyoStorageArchivist.d.ts +2 -2
  49. package/dist/esm/XyoStorageArchivist.d.ts.map +1 -1
  50. package/dist/esm/XyoStorageArchivist.js +16 -10
  51. package/dist/esm/XyoStorageArchivist.js.map +1 -1
  52. package/package.json +7 -6
  53. package/src/Archivist.ts +2 -2
  54. package/src/Queries/Insert.ts +1 -2
  55. package/src/XyoArchivist.ts +49 -28
  56. package/src/XyoArchivistWrapper.ts +32 -25
  57. package/src/XyoCookieArchivist.ts +19 -11
  58. package/src/XyoMemoryArchivist.ts +23 -14
  59. package/src/XyoStorageArchivist.ts +20 -12
  60. 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 [boundwitness] = await this.bindPayloads(storedPayloads);
84
+ const result = await this.bindResult([...storedPayloads]);
85
+ const parentBoundWitnesses = [];
85
86
  if (this.writeThrough) {
86
- await this.writeToParents([boundwitness, ...storedPayloads]);
87
+ //we store the child bw also
88
+ parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...storedPayloads])));
87
89
  }
88
- return boundwitness;
90
+ return [result[0], ...parentBoundWitnesses];
89
91
  }
90
92
  catch (ex) {
91
- console.error(`Error: ${JSON.stringify(ex, null, 2)}`);
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 [block] = await this.bindPayloads(payloads);
124
- await Promise.allSettled(compact(Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
125
- const query = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema };
126
- const bw = (await this.bindPayloads([query]))[0];
127
- return await parent?.query(bw, query);
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 block;
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.34.0",
14
- "@xyo-network/boundwitness": "^2.34.0",
15
- "@xyo-network/module": "^2.34.0",
16
- "@xyo-network/payload": "^2.34.0",
17
- "@xyo-network/promise": "^2.34.0",
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.34.0"
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[]): Promisable<TWriteResponse>
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<
@@ -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: XyoPayload[]
8
+ payloads: string[]
10
9
  }>
@@ -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 { XyoModule, XyoModuleInitializeQuerySchema, XyoModuleQueryResult, XyoModuleShutdownQuerySchema, XyoQuery } from '@xyo-network/module'
5
- import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
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[]): Promisable<XyoBoundWitness>
76
+ abstract insert(item: XyoPayload[]): PromisableArray<XyoBoundWitness>
70
77
 
71
- override async query<T extends XyoQuery = XyoQuery>(bw: XyoBoundWitness, query: T): Promise<XyoModuleQueryResult<XyoPayload>> {
72
- assertEx(this.queryable(query.schema, bw.addresses))
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 payloads: (XyoPayload | null)[] = []
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
- payloads.push(...(await this.all()))
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
- payloads.push(await this.commit())
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
- payloads.push(...(await this.find(typedQuery.filter)))
102
+ resultPayloads.push(...(await this.find(typedQuery.filter)))
92
103
  break
93
104
  case XyoArchivistGetQuerySchema:
94
- payloads.push(...(await this.get(typedQuery.hashes)))
105
+ resultPayloads.push(...(await this.get(typedQuery.hashes)))
95
106
  break
96
- case XyoArchivistInsertQuerySchema:
97
- payloads.push(await this.insert(typedQuery.payloads), ...typedQuery.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(bw, typedQuery)
116
+ return super.query(query)
101
117
  }
102
- return this.bindPayloads(payloads, queryAccount)
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 query: XyoArchivistGetQuery = { hashes: [hash], schema: XyoArchivistGetQuerySchema }
120
- const bw = (await this.bindPayloads([query]))[0]
121
- const [, payloads] = (await parent?.query(bw, 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 query: XyoArchivistInsertQuery = { payloads, schema: XyoArchivistInsertQuerySchema }
135
- const bw = (await this.bindPayloads([query]))[0]
136
- const [, writtenPayloads] = (await parent?.query(bw, query)) ?? []
137
- return writtenPayloads
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 await Promise.all(
142
- Object.values(this.parents?.write ?? {}).map(async (parent) => {
143
- return parent ? await this.writeToParent(parent, payloads) : undefined
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 query: XyoArchivistDeleteQuery = { hashes, schema: XyoArchivistDeleteQuerySchema }
27
- const bw = (await this.bindPayloads([query]))[0]
28
- return (await this.module.query(bw, query))[0].payload_hashes.map(() => true)
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 query: XyoArchivistClearQuery = { schema: XyoArchivistClearQuerySchema }
33
- const bw = (await this.bindPayloads([query]))[0]
34
- await this.module.query(bw, 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 query: XyoArchivistGetQuery = { hashes, schema: XyoArchivistGetQuerySchema }
39
- const bw = (await this.bindPayloads([query]))[0]
40
- return (await this.module.query(bw, query))[1]
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 query: XyoArchivistInsertQuery = { payloads, schema: XyoArchivistInsertQuerySchema }
45
- const bw = (await this.bindPayloads([query]))[0]
46
- return (await this.module.query(bw, query))[0]
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 query: XyoArchivistFindQuery = { filter, schema: XyoArchivistFindQuerySchema }
51
- const bw = (await this.bindPayloads([query]))[0]
52
- return (await this.module.query(bw, query))[1]
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 query: XyoArchivistAllQuery = { schema: XyoArchivistAllQuerySchema }
57
- const bw = (await this.bindPayloads([query]))[0]
58
- return (await this.module.query(bw, query))[1]
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 query: XyoArchivistCommitQuery = { schema: XyoArchivistCommitQuerySchema }
63
- const bw = (await this.bindPayloads([query]))[0]
64
- return (await this.module.query(bw, query))[0]
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 [boundwitness] = await this.bindPayloads(storedPayloads)
126
+ const result = await this.bindResult([...storedPayloads])
127
+ const parentBoundWitnesses: XyoBoundWitness[] = []
127
128
  if (this.writeThrough) {
128
- await this.writeToParents([boundwitness, ...storedPayloads])
129
+ //we store the child bw also
130
+ parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...storedPayloads])))
129
131
  }
130
- return boundwitness
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 [block] = await this.bindPayloads(payloads)
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 query: XyoArchivistInsertQuery = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema }
172
- const bw = (await this.bindPayloads([query]))[0]
173
- return await parent?.query(bw, query)
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 block
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 payloadWithmeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
105
- this.cache.set(payloadWithmeta._hash, payloadWithmeta)
106
- return payloadWithmeta
104
+ const payloadWithMeta = { ...payload, _hash: wrapper.hash, _timestamp: Date.now() }
105
+ this.cache.set(payloadWithMeta._hash, payloadWithMeta)
106
+ return payloadWithMeta
107
107
  })
108
- const [boundwitness] = await this.bindPayloads(payloads)
108
+
109
+ const result = await this.bindResult([...payloads])
110
+ const parentBoundWitnesses: XyoBoundWitness[] = []
109
111
  if (this.writeThrough) {
110
- await this.writeToParents(payloads)
112
+ //we store the child bw also
113
+ parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...payloads])))
111
114
  }
112
- return boundwitness
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 [block] = await this.bindPayloads(payloads)
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 query: XyoArchivistInsertQuery = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema }
151
- const bw = (await this.bindPayloads([query]))[0]
152
- return await parent?.query(bw, query)
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 block
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 [boundwitness] = await this.bindPayloads(storedPayloads)
119
+ const result = await this.bindResult([...storedPayloads])
120
+ const parentBoundWitnesses: XyoBoundWitness[] = []
120
121
  if (this.writeThrough) {
121
- await this.writeToParents([boundwitness, ...storedPayloads])
122
+ //we store the child bw also
123
+ parentBoundWitnesses.push(...(await this.writeToParents([result[0], ...storedPayloads])))
122
124
  }
123
- return boundwitness
125
+ return [result[0], ...parentBoundWitnesses]
124
126
  } catch (ex) {
125
- console.error(`Error: ${JSON.stringify(ex, null, 2)}`)
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 [block] = await this.bindPayloads(payloads)
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 query: XyoArchivistInsertQuery = { payloads: [block, ...payloads], schema: XyoArchivistInsertQuerySchema }
163
- const bw = (await this.bindPayloads([query]))[0]
164
- return await parent?.query(bw, query)
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 block
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: 'test',
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
- expect(insertResult).toBeDefined()
21
- expect(insertResult.payload_hashes.find((hash) => hash === payloadWrapper.hash)).toBeDefined()
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: 'test',
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([{ ...idPayload, salt: Date.now().toString() } as XyoPayload<{ salt: string }>])
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(11)
51
+ expect(getResult.length).toBe(2)
47
52
  })
48
53
  }