@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/dist/browser/Archivist.d.ts +109 -35
- package/dist/browser/Archivist.d.ts.map +1 -1
- package/dist/browser/index.mjs +75 -138
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/lib/validByType.d.ts +5 -6
- package/dist/browser/lib/validByType.d.ts.map +1 -1
- package/dist/neutral/Archivist.d.ts +109 -35
- package/dist/neutral/Archivist.d.ts.map +1 -1
- package/dist/neutral/index.mjs +75 -138
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/lib/validByType.d.ts +5 -6
- package/dist/neutral/lib/validByType.d.ts.map +1 -1
- package/dist/node/Archivist.d.ts +109 -35
- package/dist/node/Archivist.d.ts.map +1 -1
- package/dist/node/index.mjs +75 -138
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/lib/validByType.d.ts +5 -6
- package/dist/node/lib/validByType.d.ts.map +1 -1
- package/package.json +24 -26
- package/src/Archivist.ts +28 -24
- package/src/lib/validByType.ts +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-mongodb",
|
|
3
|
-
"version": "3.1
|
|
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.
|
|
41
|
-
"@xylabs/hex": "^4.4.
|
|
42
|
-
"@xyo-network/archivist-abstract": "^3.
|
|
43
|
-
"@xyo-network/archivist-model": "^3.
|
|
44
|
-
"@xyo-network/archivist-model-mongodb": "^3.1
|
|
45
|
-
"@xyo-network/boundwitness-model": "^3.
|
|
46
|
-
"@xyo-network/boundwitness-wrapper": "^3.
|
|
47
|
-
"@xyo-network/module-abstract-mongodb": "^3.1
|
|
48
|
-
"@xyo-network/payload-builder": "^3.
|
|
49
|
-
"@xyo-network/payload-model": "^3.
|
|
50
|
-
"@xyo-network/payload-mongodb": "^3.1
|
|
51
|
-
"@xyo-network/payload-wrapper": "^3.
|
|
52
|
-
"mongodb": "~6.
|
|
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/
|
|
56
|
-
"@xylabs/
|
|
57
|
-
"@xylabs/
|
|
58
|
-
"@xylabs/
|
|
59
|
-
"@
|
|
60
|
-
"@
|
|
61
|
-
"@xyo-network/
|
|
62
|
-
"@xyo-network/
|
|
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,
|
|
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
|
|
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(
|
|
61
|
-
const dataPayloadsHashes = new Set(dataPayloads.map(payload => payload.
|
|
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(
|
|
65
|
-
const dataBwsHashes = new Set(dataBws.map(payload => payload.
|
|
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
|
|
77
|
-
const result =
|
|
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<
|
|
83
|
-
const [bw, p] = await validByType(payloads)
|
|
84
|
-
const payloadsWithExternalMeta = await Promise.all(p.map(
|
|
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(
|
|
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
|
|
101
|
+
return [...boundWitnessesWithExternalMeta, ...payloadsWithExternalMeta].map(fromDbRepresentation)
|
|
98
102
|
}
|
|
99
103
|
|
|
100
|
-
protected override async nextHandler(options?: ArchivistNextOptions): Promise<
|
|
104
|
+
protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {
|
|
101
105
|
// Sanitize inputs and set defaults
|
|
102
106
|
let {
|
|
103
|
-
limit,
|
|
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 (
|
|
113
|
-
const payload = await this.
|
|
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
|
|
167
|
+
return foundPayloads.map(fromDbRepresentation)
|
|
164
168
|
}
|
|
165
169
|
|
|
166
170
|
protected override async startHandler() {
|
package/src/lib/validByType.ts
CHANGED
|
@@ -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)) {
|