@xyo-network/archivist 2.35.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 (53) hide show
  1. package/dist/cjs/Archivist.d.ts +1 -1
  2. package/dist/cjs/Archivist.d.ts.map +1 -1
  3. package/dist/cjs/XyoArchivist.d.ts +8 -10
  4. package/dist/cjs/XyoArchivist.d.ts.map +1 -1
  5. package/dist/cjs/XyoArchivist.js +27 -27
  6. package/dist/cjs/XyoArchivist.js.map +1 -1
  7. package/dist/cjs/XyoArchivistWrapper.d.ts +1 -1
  8. package/dist/cjs/XyoArchivistWrapper.d.ts.map +1 -1
  9. package/dist/cjs/XyoArchivistWrapper.js +27 -24
  10. package/dist/cjs/XyoArchivistWrapper.js.map +1 -1
  11. package/dist/cjs/XyoCookieArchivist.d.ts +1 -1
  12. package/dist/cjs/XyoCookieArchivist.d.ts.map +1 -1
  13. package/dist/cjs/XyoCookieArchivist.js +11 -9
  14. package/dist/cjs/XyoCookieArchivist.js.map +1 -1
  15. package/dist/cjs/XyoMemoryArchivist.d.ts +1 -1
  16. package/dist/cjs/XyoMemoryArchivist.d.ts.map +1 -1
  17. package/dist/cjs/XyoMemoryArchivist.js +14 -12
  18. package/dist/cjs/XyoMemoryArchivist.js.map +1 -1
  19. package/dist/cjs/XyoStorageArchivist.d.ts +1 -1
  20. package/dist/cjs/XyoStorageArchivist.d.ts.map +1 -1
  21. package/dist/cjs/XyoStorageArchivist.js +12 -10
  22. package/dist/cjs/XyoStorageArchivist.js.map +1 -1
  23. package/dist/docs.json +6288 -5614
  24. package/dist/esm/Archivist.d.ts +1 -1
  25. package/dist/esm/Archivist.d.ts.map +1 -1
  26. package/dist/esm/XyoArchivist.d.ts +8 -10
  27. package/dist/esm/XyoArchivist.d.ts.map +1 -1
  28. package/dist/esm/XyoArchivist.js +27 -27
  29. package/dist/esm/XyoArchivist.js.map +1 -1
  30. package/dist/esm/XyoArchivistWrapper.d.ts +1 -1
  31. package/dist/esm/XyoArchivistWrapper.d.ts.map +1 -1
  32. package/dist/esm/XyoArchivistWrapper.js +26 -24
  33. package/dist/esm/XyoArchivistWrapper.js.map +1 -1
  34. package/dist/esm/XyoCookieArchivist.d.ts +1 -1
  35. package/dist/esm/XyoCookieArchivist.d.ts.map +1 -1
  36. package/dist/esm/XyoCookieArchivist.js +10 -8
  37. package/dist/esm/XyoCookieArchivist.js.map +1 -1
  38. package/dist/esm/XyoMemoryArchivist.d.ts +1 -1
  39. package/dist/esm/XyoMemoryArchivist.d.ts.map +1 -1
  40. package/dist/esm/XyoMemoryArchivist.js +13 -11
  41. package/dist/esm/XyoMemoryArchivist.js.map +1 -1
  42. package/dist/esm/XyoStorageArchivist.d.ts +1 -1
  43. package/dist/esm/XyoStorageArchivist.d.ts.map +1 -1
  44. package/dist/esm/XyoStorageArchivist.js +11 -9
  45. package/dist/esm/XyoStorageArchivist.js.map +1 -1
  46. package/package.json +7 -6
  47. package/src/Archivist.ts +1 -1
  48. package/src/XyoArchivist.ts +43 -37
  49. package/src/XyoArchivistWrapper.ts +28 -29
  50. package/src/XyoCookieArchivist.ts +11 -9
  51. package/src/XyoMemoryArchivist.ts +15 -12
  52. package/src/XyoStorageArchivist.ts +12 -10
  53. package/src/test.spec.test/testArchivist.ts +7 -4
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.35.0",
14
- "@xyo-network/boundwitness": "^2.35.0",
15
- "@xyo-network/module": "^2.35.0",
16
- "@xyo-network/payload": "^2.35.0",
17
- "@xyo-network/promise": "^2.35.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.35.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
  }
@@ -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
 
@@ -66,52 +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>(
72
- bw: XyoBoundWitness,
78
+ override async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness>(
73
79
  query: T,
74
- payloads?: XyoPayload[],
75
- ): Promise<XyoModuleQueryResult<XyoPayload>> {
76
- assertEx(this.queryable(query.schema, bw.addresses))
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))
77
85
 
78
- const result: (XyoPayload | null)[] = []
86
+ const resultPayloads: (XyoPayload | null)[] = []
79
87
  const queryAccount = new XyoAccount()
80
- const typedQuery = query as XyoArchivistQuery
81
88
  switch (typedQuery.schema) {
82
89
  case XyoArchivistAllQuerySchema:
83
- result.push(...(await this.all()))
90
+ resultPayloads.push(...(await this.all()))
84
91
  break
85
92
  case XyoArchivistClearQuerySchema:
86
93
  await this.clear()
87
94
  break
88
95
  case XyoArchivistCommitQuerySchema:
89
- result.push(...(await this.commit()))
96
+ resultPayloads.push(...(await this.commit()))
90
97
  break
91
98
  case XyoArchivistDeleteQuerySchema:
92
99
  await this.delete(typedQuery.hashes)
93
100
  break
94
101
  case XyoArchivistFindQuerySchema:
95
- result.push(...(await this.find(typedQuery.filter)))
102
+ resultPayloads.push(...(await this.find(typedQuery.filter)))
96
103
  break
97
104
  case XyoArchivistGetQuerySchema:
98
- result.push(...(await this.get(typedQuery.hashes)))
105
+ resultPayloads.push(...(await this.get(typedQuery.hashes)))
99
106
  break
100
107
  case XyoArchivistInsertQuerySchema: {
101
- const actualHashes = payloads?.map((payload) => PayloadWrapper.hash(payload))
102
- const resolvedPayloads = compact(
103
- typedQuery.payloads.map((hash) => {
104
- const index = actualHashes?.indexOf(hash)
105
- return index !== undefined ? (index > -1 ? payloads?.[index] ?? null : null) : null
106
- }),
107
- )
108
- result.push(await this.insert(resolvedPayloads))
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))))
109
113
  break
110
114
  }
111
115
  default:
112
- return super.query(bw, typedQuery)
116
+ return super.query(query)
113
117
  }
114
- return this.bindPayloads(result, queryAccount)
118
+ return this.bindResult(resultPayloads, queryAccount)
115
119
  }
116
120
 
117
121
  private resolveArchivists(archivists?: Record<string, PayloadArchivist | null | undefined>) {
@@ -128,9 +132,9 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
128
132
  return compact(
129
133
  await Promise.all(
130
134
  Object.values(this.parents?.read ?? {}).map(async (parent) => {
131
- const query: XyoArchivistGetQuery = { hashes: [hash], schema: XyoArchivistGetQuerySchema }
132
- const bw = (await this.bindPayloads([query]))[0]
133
- 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])) ?? []
134
138
  const wrapper = payloads?.[0] ? new PayloadWrapper(payloads?.[0]) : undefined
135
139
  if (wrapper && wrapper.hash !== hash) {
136
140
  console.warn(`Parent [${parent?.address}] returned payload with invalid hash [${hash} != ${wrapper.hash}]`)
@@ -143,20 +147,22 @@ export abstract class XyoArchivist<TConfig extends XyoPayload = XyoPayload>
143
147
  }
144
148
 
145
149
  protected async writeToParent(parent: PayloadArchivist, payloads: XyoPayload[]) {
146
- const query: XyoArchivistInsertQuery = {
150
+ const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
147
151
  payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
148
152
  schema: XyoArchivistInsertQuerySchema,
149
- }
150
- const bw = (await this.bindPayloads([query, ...payloads]))[0]
151
- const [, writtenPayloads] = (await parent?.query(bw, query, payloads)) ?? []
152
- return writtenPayloads
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]
153
157
  }
154
158
 
155
- protected async writeToParents(payloads: XyoPayload[]) {
156
- return await Promise.all(
157
- Object.values(this.parents?.write ?? {}).map(async (parent) => {
158
- return parent ? await this.writeToParent(parent, payloads) : undefined
159
- }),
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
+ ),
160
166
  )
161
167
  }
162
168
 
@@ -1,4 +1,4 @@
1
- import { XyoBoundWitness } from '@xyo-network/boundwitness'
1
+ import { XyoBoundWitness, XyoBoundWitnessSchema } from '@xyo-network/boundwitness'
2
2
  import { XyoModuleWrapper } from '@xyo-network/module'
3
3
  import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
4
4
 
@@ -23,52 +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 = {
44
+ public async insert(payloads: XyoPayload[]): Promise<XyoBoundWitness[]> {
45
+ const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
45
46
  payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
46
47
  schema: XyoArchivistInsertQuerySchema,
47
- }
48
-
49
- const bw = (await this.bindPayloads([query, ...payloads]))[0]
50
- const result = await this.module.query(bw, query, payloads)
51
-
52
- console.log(`result: ${JSON.stringify(result, null, 2)}`)
53
-
54
- return result[1][0] as XyoBoundWitness
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]
55
54
  }
56
55
 
57
56
  public async find(filter?: XyoPayloadFindFilter): Promise<(XyoPayload | null)[]> {
58
- const query: XyoArchivistFindQuery = { filter, schema: XyoArchivistFindQuerySchema }
59
- const bw = (await this.bindPayloads([query]))[0]
60
- 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]
61
60
  }
62
61
 
63
62
  public async all(): Promise<(XyoPayload | null)[]> {
64
- const query: XyoArchivistAllQuery = { schema: XyoArchivistAllQuerySchema }
65
- const bw = (await this.bindPayloads([query]))[0]
66
- 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]
67
66
  }
68
67
 
69
68
  public async commit(): Promise<XyoBoundWitness[]> {
70
- const query: XyoArchivistCommitQuery = { schema: XyoArchivistCommitQuerySchema }
71
- const bw = (await this.bindPayloads([query]))[0]
72
- return (await this.module.query(bw, query))[1] as 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[]
73
72
  }
74
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')
@@ -167,19 +169,19 @@ export class XyoCookieArchivist extends XyoArchivist<XyoCookieArchivistConfig> {
167
169
  const settled = await Promise.allSettled(
168
170
  compact(
169
171
  Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
170
- const query: XyoArchivistInsertQuery = {
172
+ const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
171
173
  payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
172
174
  schema: XyoArchivistInsertQuerySchema,
173
- }
174
- const bw = (await this.bindPayloads([query]))[0]
175
- return await parent?.query(bw, query)
175
+ })
176
+ const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
177
+ return (await parent?.query(query[0], query[1]))?.[0]
176
178
  }),
177
179
  ),
178
180
  )
179
181
  await this.clear()
180
182
  return compact(
181
183
  settled.map((result) => {
182
- return result.status === 'fulfilled' ? result.value?.[0] : null
184
+ return result.status === 'fulfilled' ? result.value : null
183
185
  }),
184
186
  )
185
187
  } catch (ex) {
@@ -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')
@@ -146,19 +149,19 @@ export class XyoMemoryArchivist extends XyoArchivist<XyoMemoryArchivistConfig> {
146
149
  const settled = await Promise.allSettled(
147
150
  compact(
148
151
  Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
149
- const query: XyoArchivistInsertQuery = {
152
+ const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
150
153
  payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
151
154
  schema: XyoArchivistInsertQuerySchema,
152
- }
153
- const bw = (await this.bindPayloads([query]))[0]
154
- return await parent?.query(bw, query)
155
+ })
156
+ const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
157
+ return (await parent?.query(query[0], query[1]))?.[0]
155
158
  }),
156
159
  ),
157
160
  )
158
161
  await this.clear()
159
162
  return compact(
160
163
  settled.map((result) => {
161
- return result.status === 'fulfilled' ? result.value?.[0] : null
164
+ return result.status === 'fulfilled' ? result.value : null
162
165
  }),
163
166
  )
164
167
  } catch (ex) {
@@ -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
  }
@@ -158,19 +160,19 @@ export class XyoStorageArchivist extends XyoArchivist<XyoStorageArchivistConfig>
158
160
  const settled = await Promise.allSettled(
159
161
  compact(
160
162
  Object.values(this.parents?.commit ?? [])?.map(async (parent) => {
161
- const query: XyoArchivistInsertQuery = {
163
+ const queryPayload = PayloadWrapper.parse<XyoArchivistInsertQuery>({
162
164
  payloads: payloads.map((payload) => PayloadWrapper.hash(payload)),
163
165
  schema: XyoArchivistInsertQuerySchema,
164
- }
165
- const bw = (await this.bindPayloads([query]))[0]
166
- return await parent?.query(bw, query)
166
+ })
167
+ const query = await this.bindQuery([queryPayload.body], queryPayload.hash)
168
+ return (await parent?.query(query[0], query[1]))?.[0]
167
169
  }),
168
170
  ),
169
171
  )
170
172
  await this.clear()
171
173
  return compact(
172
174
  settled.map((result) => {
173
- return result.status === 'fulfilled' ? result.value?.[0] : null
175
+ return result.status === 'fulfilled' ? result.value : null
174
176
  }),
175
177
  )
176
178
  } catch (ex) {
@@ -3,13 +3,14 @@
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
15
  salt: Date.now().toString(),
15
16
  schema: 'network.xyo.id',
@@ -18,9 +19,11 @@ export const testArchivistRoundTrip = (archivist: XyoArchivist, name: string) =>
18
19
 
19
20
  const archivistWrapper = new XyoArchivistWrapper(archivist)
20
21
  const insertResult = await archivistWrapper.insert([idPayload])
21
- expect(insertResult).toBeDefined()
22
+ const insertResultWrappers = insertResult.map((bw) => new BoundWitnessWrapper(bw))
23
+ const insertResultPayload = insertResultWrappers.pop() as BoundWitnessWrapper
24
+ expect(insertResultPayload).toBeDefined()
22
25
 
23
- expect(insertResult.payload_hashes.find((hash) => hash === payloadWrapper.hash)).toBeDefined()
26
+ expect(insertResultPayload.payloadHashes.find((hash) => hash === payloadWrapper.hash)).toBeDefined()
24
27
  const getResult = await archivistWrapper.get([payloadWrapper.hash])
25
28
  expect(getResult).toBeDefined()
26
29
  expect(getResult.length).toBe(1)
@@ -33,7 +36,7 @@ export const testArchivistRoundTrip = (archivist: XyoArchivist, name: string) =>
33
36
  }
34
37
 
35
38
  export const testArchivistAll = (archivist: XyoArchivist, name: string) => {
36
- test(`XyoArchivist [${name}]`, async () => {
39
+ test(`XyoArchivist All [${name}]`, async () => {
37
40
  const idPayload = {
38
41
  salt: Date.now().toString(),
39
42
  schema: 'network.xyo.id',