@xyo-network/boundwitness-wrapper 2.90.2 → 2.90.3
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/BoundWitnessWrapper.d.cts +4 -2
- package/dist/browser/BoundWitnessWrapper.d.cts.map +1 -1
- package/dist/browser/BoundWitnessWrapper.d.mts +4 -2
- package/dist/browser/BoundWitnessWrapper.d.mts.map +1 -1
- package/dist/browser/BoundWitnessWrapper.d.ts +4 -2
- package/dist/browser/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/browser/QueryBoundWitnessWrapper.d.cts +12 -0
- package/dist/browser/QueryBoundWitnessWrapper.d.cts.map +1 -0
- package/dist/browser/QueryBoundWitnessWrapper.d.mts +12 -0
- package/dist/browser/QueryBoundWitnessWrapper.d.mts.map +1 -0
- package/dist/browser/QueryBoundWitnessWrapper.d.ts +12 -0
- package/dist/browser/QueryBoundWitnessWrapper.d.ts.map +1 -0
- package/dist/browser/index.cjs +59 -8
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +59 -8
- package/dist/browser/index.js.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.cts +4 -2
- package/dist/node/BoundWitnessWrapper.d.cts.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.mts +4 -2
- package/dist/node/BoundWitnessWrapper.d.mts.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.ts +4 -2
- package/dist/node/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/node/QueryBoundWitnessWrapper.d.cts +12 -0
- package/dist/node/QueryBoundWitnessWrapper.d.cts.map +1 -0
- package/dist/node/QueryBoundWitnessWrapper.d.mts +12 -0
- package/dist/node/QueryBoundWitnessWrapper.d.mts.map +1 -0
- package/dist/node/QueryBoundWitnessWrapper.d.ts +12 -0
- package/dist/node/QueryBoundWitnessWrapper.d.ts.map +1 -0
- package/dist/node/index.cjs +59 -8
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +58 -8
- package/dist/node/index.js.map +1 -1
- package/package.json +11 -9
- package/src/BoundWitnessWrapper.ts +33 -12
- package/src/QueryBoundWitnessWrapper.ts +49 -0
- package/src/index.ts +1 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { Hash } from '@xylabs/hex'
|
|
3
|
+
import { AnyObject, isObject } from '@xylabs/object'
|
|
3
4
|
import { asBoundWitness, BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'
|
|
4
5
|
import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
|
|
5
6
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
6
7
|
import { Payload, WithMeta } from '@xyo-network/payload-model'
|
|
7
8
|
import { isPayloadWrapperBase, PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'
|
|
8
9
|
|
|
9
|
-
export const isBoundWitnessWrapper = (value?: unknown): value is
|
|
10
|
+
export const isBoundWitnessWrapper = (value?: unknown): value is BoundWitnessWrapper => {
|
|
10
11
|
if (isPayloadWrapperBase(value)) {
|
|
11
12
|
return typeof (value as BoundWitnessWrapper).payloadsDataHashMap === 'function'
|
|
12
13
|
}
|
|
@@ -49,23 +50,42 @@ export class BoundWitnessWrapper<
|
|
|
49
50
|
|
|
50
51
|
static async load(address: string) {
|
|
51
52
|
const wrapper = await PayloadWrapper.load(address)
|
|
52
|
-
const payload = wrapper?.
|
|
53
|
+
const payload = wrapper?.payload
|
|
53
54
|
assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')
|
|
54
55
|
|
|
55
56
|
const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined
|
|
56
57
|
return boundWitness ? await BoundWitnessWrapper.wrap(boundWitness) : null
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
static async parse<T extends BoundWitness, P extends Payload>(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
static async parse<T extends BoundWitness = BoundWitness, P extends Payload = Payload>(
|
|
61
|
+
obj: unknown,
|
|
62
|
+
payloads?: P[],
|
|
63
|
+
): Promise<BoundWitnessWrapper<T, P>> {
|
|
64
|
+
let hydratedObj: AnyObject | undefined = undefined
|
|
65
|
+
switch (typeof obj) {
|
|
66
|
+
case 'string': {
|
|
67
|
+
hydratedObj = JSON.parse(obj)
|
|
68
|
+
break
|
|
69
|
+
}
|
|
63
70
|
case 'object': {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
if (isObject(obj)) {
|
|
72
|
+
hydratedObj = obj
|
|
73
|
+
}
|
|
74
|
+
break
|
|
67
75
|
}
|
|
68
76
|
}
|
|
77
|
+
|
|
78
|
+
if (hydratedObj) {
|
|
79
|
+
if (isBoundWitnessWrapper(hydratedObj)) {
|
|
80
|
+
return hydratedObj as BoundWitnessWrapper<T, P>
|
|
81
|
+
}
|
|
82
|
+
if (isBoundWitness(hydratedObj)) {
|
|
83
|
+
//we use PayloadBuilder here since we want to use the BoundWitness as-is (no resigning), but want to add the $hash is needed
|
|
84
|
+
const bw = await PayloadBuilder.build<T>(hydratedObj as T)
|
|
85
|
+
return new BoundWitnessWrapper(bw, payloads ? await Promise.all(payloads?.map((payload) => PayloadBuilder.build(payload))) : [])
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
69
89
|
throw new Error(`Unable to parse [${typeof obj}]`)
|
|
70
90
|
}
|
|
71
91
|
|
|
@@ -94,7 +114,7 @@ export class BoundWitnessWrapper<
|
|
|
94
114
|
if (obj instanceof BoundWitnessWrapper) {
|
|
95
115
|
return obj
|
|
96
116
|
} else if (obj instanceof PayloadWrapper && obj.schema() === BoundWitnessSchema) {
|
|
97
|
-
return await BoundWitnessWrapper.parse(obj.
|
|
117
|
+
return await BoundWitnessWrapper.parse(obj.payload, payloads)
|
|
98
118
|
} else {
|
|
99
119
|
return await BoundWitnessWrapper.parse(obj, payloads)
|
|
100
120
|
}
|
|
@@ -120,8 +140,9 @@ export class BoundWitnessWrapper<
|
|
|
120
140
|
): Promise<Record<string, BoundWitnessWrapper<T>>> {
|
|
121
141
|
const result: Record<string, BoundWitnessWrapper<T>> = {}
|
|
122
142
|
await Promise.all(
|
|
123
|
-
boundWitnesses.map(async (
|
|
124
|
-
|
|
143
|
+
boundWitnesses.map(async (bw) => {
|
|
144
|
+
const wrapped: BoundWitnessWrapper<T> = await BoundWitnessWrapper.parse(bw)
|
|
145
|
+
result[await wrapped.dataHash()] = await BoundWitnessWrapper.parse(bw)
|
|
125
146
|
}),
|
|
126
147
|
)
|
|
127
148
|
return result
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { compact } from '@xylabs/lodash'
|
|
3
|
+
import { QueryBoundWitness } from '@xyo-network/boundwitness-model'
|
|
4
|
+
import { PayloadBuilder } from '@xyo-network/payload'
|
|
5
|
+
import { Payload, Query } from '@xyo-network/payload-model'
|
|
6
|
+
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
7
|
+
|
|
8
|
+
import { BoundWitnessWrapper } from './BoundWitnessWrapper'
|
|
9
|
+
|
|
10
|
+
export class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {
|
|
11
|
+
private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined
|
|
12
|
+
private _query: T | undefined
|
|
13
|
+
|
|
14
|
+
static async parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): Promise<QueryBoundWitnessWrapper<T>> {
|
|
15
|
+
assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')
|
|
16
|
+
switch (typeof obj) {
|
|
17
|
+
case 'object': {
|
|
18
|
+
const castWrapper = obj as QueryBoundWitnessWrapper<T>
|
|
19
|
+
const wrapper =
|
|
20
|
+
castWrapper instanceof QueryBoundWitnessWrapper
|
|
21
|
+
? castWrapper
|
|
22
|
+
: new QueryBoundWitnessWrapper<T>(
|
|
23
|
+
await PayloadBuilder.build(obj as QueryBoundWitness),
|
|
24
|
+
payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,
|
|
25
|
+
)
|
|
26
|
+
/*if (!wrapper.valid) {
|
|
27
|
+
console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)
|
|
28
|
+
}*/
|
|
29
|
+
return wrapper
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`Unable to parse [${typeof obj}]`)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {
|
|
36
|
+
this._payloadsWithoutQuery =
|
|
37
|
+
this._payloadsWithoutQuery ??
|
|
38
|
+
(await Promise.all(
|
|
39
|
+
compact((await PayloadBuilder.filterExclude(this.payloads, this.payload.query)).map((payload) => PayloadWrapper.wrap(payload))),
|
|
40
|
+
))
|
|
41
|
+
return this._payloadsWithoutQuery
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async getQuery(): Promise<T> {
|
|
45
|
+
const payloadMap = await this.payloadsDataHashMap()
|
|
46
|
+
this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)
|
|
47
|
+
return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)
|
|
48
|
+
}
|
|
49
|
+
}
|
package/src/index.ts
CHANGED