@xyo-network/archivist-mongodb 3.1.7 → 3.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/archivist-mongodb",
3
- "version": "3.1.7",
3
+ "version": "3.2.0-rc.1",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -37,37 +37,35 @@
37
37
  "module": "dist/node/index.mjs",
38
38
  "types": "dist/node/index.d.ts",
39
39
  "dependencies": {
40
- "@xylabs/exists": "^4.4.10",
41
- "@xylabs/hex": "^4.4.10",
42
- "@xyo-network/archivist-abstract": "^3.5.2",
43
- "@xyo-network/archivist-model": "^3.5.2",
44
- "@xyo-network/archivist-model-mongodb": "^3.1.7",
45
- "@xyo-network/boundwitness-model": "^3.5.2",
46
- "@xyo-network/boundwitness-wrapper": "^3.5.2",
47
- "@xyo-network/module-abstract-mongodb": "^3.1.7",
48
- "@xyo-network/payload-builder": "^3.5.2",
49
- "@xyo-network/payload-model": "^3.5.2",
50
- "@xyo-network/payload-mongodb": "^3.1.7",
51
- "@xyo-network/payload-wrapper": "^3.5.2",
52
- "mongodb": "~6.11.0"
40
+ "@xylabs/exists": "^4.4.25",
41
+ "@xylabs/hex": "^4.4.25",
42
+ "@xyo-network/archivist-abstract": "^3.6.0-rc.16",
43
+ "@xyo-network/archivist-model": "^3.6.0-rc.16",
44
+ "@xyo-network/archivist-model-mongodb": "^3.2.0-rc.1",
45
+ "@xyo-network/boundwitness-model": "^3.6.0-rc.16",
46
+ "@xyo-network/boundwitness-wrapper": "^3.6.0-rc.16",
47
+ "@xyo-network/module-abstract-mongodb": "^3.2.0-rc.1",
48
+ "@xyo-network/payload-builder": "^3.6.0-rc.16",
49
+ "@xyo-network/payload-model": "^3.6.0-rc.16",
50
+ "@xyo-network/payload-mongodb": "^3.2.0-rc.1",
51
+ "@xyo-network/payload-wrapper": "^3.6.0-rc.16",
52
+ "mongodb": "~6.12.0"
53
53
  },
54
54
  "devDependencies": {
55
- "@xylabs/assert": "^4.4.10",
56
- "@xylabs/delay": "^4.4.10",
57
- "@xylabs/jest-helpers": "^4.4.10",
58
- "@xylabs/ts-scripts-yarn3": "^4.2.4",
59
- "@xylabs/tsconfig": "^4.2.4",
60
- "@xylabs/vitest-extended": "^4.4.10",
61
- "@xyo-network/account": "^3.5.2",
62
- "@xyo-network/archivist-wrapper": "^3.5.2",
63
- "@xyo-network/boundwitness-builder": "^3.5.2",
64
- "@xyo-network/sdk-xyo-mongo-js": "^3.1.7",
55
+ "@xylabs/delay": "^4.4.25",
56
+ "@xylabs/ts-scripts-yarn3": "^4.2.6",
57
+ "@xylabs/tsconfig": "^4.2.6",
58
+ "@xylabs/vitest-extended": "^4.4.25",
59
+ "@xyo-network/account": "^3.6.0-rc.16",
60
+ "@xyo-network/archivist-wrapper": "^3.6.0-rc.16",
61
+ "@xyo-network/boundwitness-builder": "^3.6.0-rc.16",
62
+ "@xyo-network/sdk-xyo-mongo-js": "^3.2.0-rc.1",
65
63
  "fake-indexeddb": "^6.0.0",
66
- "jest": "^29.7.0",
67
64
  "typescript": "^5.7.2",
68
65
  "vitest": "^2.1.8"
69
66
  },
70
67
  "publishConfig": {
71
68
  "access": "public"
72
- }
69
+ },
70
+ "stableVersion": "3.1.7"
73
71
  }
package/src/Archivist.ts CHANGED
@@ -7,11 +7,10 @@ import { MongoDBArchivistConfigSchema } from '@xyo-network/archivist-model-mongo
7
7
  import { MongoDBModuleMixin } from '@xyo-network/module-abstract-mongodb'
8
8
  import { PayloadBuilder } from '@xyo-network/payload-builder'
9
9
  import type {
10
- Payload, Schema, WithMeta,
10
+ Payload, Schema, Sequence, WithStorageMeta,
11
11
  } from '@xyo-network/payload-model'
12
12
  import type { PayloadWithMongoMeta } from '@xyo-network/payload-mongodb'
13
13
  import { fromDbRepresentation, toDbRepresentation } from '@xyo-network/payload-mongodb'
14
- import { PayloadWrapper } from '@xyo-network/payload-wrapper'
15
14
  import { ObjectId } from 'mongodb'
16
15
 
17
16
  import { validByType } from './lib/index.js'
@@ -29,11 +28,6 @@ export class MongoDBArchivist extends MongoDBArchivistBase {
29
28
  */
30
29
  protected readonly aggregateTimeoutMs = 10_000
31
30
 
32
- override async head(): Promise<Payload | undefined> {
33
- const head = await this.next({ limit: 1, order: 'desc' })
34
- return head[0] ? PayloadWrapper.wrap(head[0]).payload : undefined
35
- }
36
-
37
31
  protected async findOneByHash(hash: Hash) {
38
32
  const dataPayload = (await this.payloads.findOne({ _$hash: hash }))
39
33
  if (dataPayload) {
@@ -54,15 +48,25 @@ export class MongoDBArchivist extends MongoDBArchivistBase {
54
48
  }
55
49
  }
56
50
 
57
- protected override async getHandler(hashes: Hash[]): Promise<WithMeta<Payload>[]> {
51
+ protected async findOneBySequence(sequence: Sequence) {
52
+ const dataPayload = (await this.payloads.findOne({ _sequence: sequence }))
53
+ if (dataPayload) {
54
+ return dataPayload
55
+ } else {
56
+ const dataBw = (await this.boundWitnesses.findOne({ _sequence: sequence }))
57
+ return dataBw
58
+ }
59
+ }
60
+
61
+ protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {
58
62
  let remainingHashes = [...hashes]
59
63
 
60
- const dataPayloads = (await Promise.all(remainingHashes.map(_$hash => this.payloads.findOne({ _$hash })))).filter(exists)
61
- const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._$hash))
64
+ const dataPayloads = (await Promise.all(remainingHashes.map(_dataHash => this.payloads.findOne({ _dataHash })))).filter(exists)
65
+ const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload._dataHash))
62
66
  remainingHashes = remainingHashes.filter(hash => !dataPayloadsHashes.has(hash))
63
67
 
64
- const dataBws = (await Promise.all(remainingHashes.map(_$hash => this.boundWitnesses.findOne({ _$hash })))).filter(exists)
65
- const dataBwsHashes = new Set(dataBws.map(payload => payload._$hash))
68
+ const dataBws = (await Promise.all(remainingHashes.map(_dataHash => this.boundWitnesses.findOne({ _dataHash })))).filter(exists)
69
+ const dataBwsHashes = new Set(dataBws.map(payload => payload._dataHash))
66
70
  remainingHashes = remainingHashes.filter(hash => !dataBwsHashes.has(hash))
67
71
 
68
72
  const payloads = (await Promise.all(remainingHashes.map(_hash => this.payloads.findOne({ _hash })))).filter(exists)
@@ -73,34 +77,34 @@ export class MongoDBArchivist extends MongoDBArchivistBase {
73
77
  const bwsHashes = new Set(bws.map(payload => payload._hash))
74
78
  remainingHashes = remainingHashes.filter(hash => !bwsHashes.has(hash))
75
79
 
76
- const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws] as PayloadWithMongoMeta<Payload & { _$hash: Hash; _$meta?: unknown }>[]
77
- const result = await PayloadBuilder.build(foundPayloads.map(fromDbRepresentation))
80
+ const foundPayloads = [...dataPayloads, ...dataBws, ...payloads, ...bws] as PayloadWithMongoMeta<Payload>[]
81
+ const result = foundPayloads.map(fromDbRepresentation)
78
82
  // console.log(`getHandler: ${JSON.stringify(hashes, null, 2)}:${JSON.stringify(result, null, 2)}`)
79
83
  return result
80
84
  }
81
85
 
82
- protected override async insertHandler(payloads: Payload[]): Promise<WithMeta<Payload>[]> {
83
- const [bw, p] = await validByType(payloads)
84
- const payloadsWithExternalMeta = await Promise.all(p.map((value, index) => toDbRepresentation(value, index)))
86
+ protected override async insertHandler(payloads: Payload[]): Promise<WithStorageMeta<Payload>[]> {
87
+ const [bw, p] = await validByType(await PayloadBuilder.addStorageMeta(payloads))
88
+ const payloadsWithExternalMeta = await Promise.all(p.map(value => toDbRepresentation(value)))
85
89
  if (payloadsWithExternalMeta.length > 0) {
86
90
  const payloadsResult = await this.payloads.insertMany(payloadsWithExternalMeta)
87
91
  if (!payloadsResult.acknowledged || payloadsResult.insertedCount !== payloadsWithExternalMeta.length)
88
92
  throw new Error('MongoDBArchivist: Error inserting Payloads')
89
93
  }
90
- const boundWitnessesWithExternalMeta = await Promise.all(bw.map((value, index) => toDbRepresentation(value, index)))
94
+ const boundWitnessesWithExternalMeta = await Promise.all(bw.map(value => toDbRepresentation(value)))
91
95
  if (boundWitnessesWithExternalMeta.length > 0) {
92
96
  const boundWitnessesResult = await this.boundWitnesses.insertMany(boundWitnessesWithExternalMeta)
93
97
  if (!boundWitnessesResult.acknowledged || boundWitnessesResult.insertedCount !== boundWitnessesWithExternalMeta.length)
94
98
  throw new Error('MongoDBArchivist: Error inserting BoundWitnesses')
95
99
  }
96
100
 
97
- return await PayloadBuilder.build([...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation))
101
+ return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation)
98
102
  }
99
103
 
100
- protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithMeta<Payload>[]> {
104
+ protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {
101
105
  // Sanitize inputs and set defaults
102
106
  let {
103
- limit, offset, order,
107
+ limit, cursor, order,
104
108
  } = options ?? { limit: 10, order: 'desc' }
105
109
 
106
110
  if (!limit) limit = 10
@@ -109,8 +113,8 @@ export class MongoDBArchivist extends MongoDBArchivistBase {
109
113
  if (order != 'asc') order = 'desc'
110
114
 
111
115
  let id: ObjectId | undefined
112
- if (offset) {
113
- const payload = await this.findOneByHash(offset)
116
+ if (cursor) {
117
+ const payload = await this.findOneBySequence(cursor)
114
118
  // TODO: Should we throw an error if the requested payload is not found?
115
119
  if (payload) id = payload._id
116
120
  } else {
@@ -160,7 +164,7 @@ export class MongoDBArchivist extends MongoDBArchivistBase {
160
164
  })
161
165
 
162
166
  // Convert from DB representation to Payloads
163
- return await PayloadBuilder.build(foundPayloads.map(fromDbRepresentation))
167
+ return foundPayloads.map(fromDbRepresentation)
164
168
  }
165
169
 
166
170
  protected override async startHandler() {
@@ -1,11 +1,11 @@
1
1
  import type { BoundWitness } from '@xyo-network/boundwitness-model'
2
2
  import { isBoundWitness, isQueryBoundWitness } from '@xyo-network/boundwitness-model'
3
3
  import { BoundWitnessWrapper, QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
4
- import type { Payload } from '@xyo-network/payload-model'
4
+ import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
5
5
  import { PayloadWrapper } from '@xyo-network/payload-wrapper'
6
6
 
7
- export const validByType = async (payloads: Payload[] = []) => {
8
- const results: [BoundWitness[], Payload[]] = [[], []]
7
+ export const validByType = async (payloads: WithStorageMeta<Payload>[] = []) => {
8
+ const results: [WithStorageMeta<BoundWitness>[], WithStorageMeta<Payload>[]] = [[], []]
9
9
  await Promise.all(
10
10
  payloads.map(async (payload) => {
11
11
  if (isBoundWitness(payload)) {