@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.
Files changed (48) hide show
  1. package/dist/browser/BoundWitnessWrapper.d.cts +4 -2
  2. package/dist/browser/BoundWitnessWrapper.d.cts.map +1 -1
  3. package/dist/browser/BoundWitnessWrapper.d.mts +4 -2
  4. package/dist/browser/BoundWitnessWrapper.d.mts.map +1 -1
  5. package/dist/browser/BoundWitnessWrapper.d.ts +4 -2
  6. package/dist/browser/BoundWitnessWrapper.d.ts.map +1 -1
  7. package/dist/browser/QueryBoundWitnessWrapper.d.cts +12 -0
  8. package/dist/browser/QueryBoundWitnessWrapper.d.cts.map +1 -0
  9. package/dist/browser/QueryBoundWitnessWrapper.d.mts +12 -0
  10. package/dist/browser/QueryBoundWitnessWrapper.d.mts.map +1 -0
  11. package/dist/browser/QueryBoundWitnessWrapper.d.ts +12 -0
  12. package/dist/browser/QueryBoundWitnessWrapper.d.ts.map +1 -0
  13. package/dist/browser/index.cjs +59 -8
  14. package/dist/browser/index.cjs.map +1 -1
  15. package/dist/browser/index.d.cts +1 -0
  16. package/dist/browser/index.d.cts.map +1 -1
  17. package/dist/browser/index.d.mts +1 -0
  18. package/dist/browser/index.d.mts.map +1 -1
  19. package/dist/browser/index.d.ts +1 -0
  20. package/dist/browser/index.d.ts.map +1 -1
  21. package/dist/browser/index.js +59 -8
  22. package/dist/browser/index.js.map +1 -1
  23. package/dist/node/BoundWitnessWrapper.d.cts +4 -2
  24. package/dist/node/BoundWitnessWrapper.d.cts.map +1 -1
  25. package/dist/node/BoundWitnessWrapper.d.mts +4 -2
  26. package/dist/node/BoundWitnessWrapper.d.mts.map +1 -1
  27. package/dist/node/BoundWitnessWrapper.d.ts +4 -2
  28. package/dist/node/BoundWitnessWrapper.d.ts.map +1 -1
  29. package/dist/node/QueryBoundWitnessWrapper.d.cts +12 -0
  30. package/dist/node/QueryBoundWitnessWrapper.d.cts.map +1 -0
  31. package/dist/node/QueryBoundWitnessWrapper.d.mts +12 -0
  32. package/dist/node/QueryBoundWitnessWrapper.d.mts.map +1 -0
  33. package/dist/node/QueryBoundWitnessWrapper.d.ts +12 -0
  34. package/dist/node/QueryBoundWitnessWrapper.d.ts.map +1 -0
  35. package/dist/node/index.cjs +59 -8
  36. package/dist/node/index.cjs.map +1 -1
  37. package/dist/node/index.d.cts +1 -0
  38. package/dist/node/index.d.cts.map +1 -1
  39. package/dist/node/index.d.mts +1 -0
  40. package/dist/node/index.d.mts.map +1 -1
  41. package/dist/node/index.d.ts +1 -0
  42. package/dist/node/index.d.ts.map +1 -1
  43. package/dist/node/index.js +58 -8
  44. package/dist/node/index.js.map +1 -1
  45. package/package.json +11 -9
  46. package/src/BoundWitnessWrapper.ts +33 -12
  47. package/src/QueryBoundWitnessWrapper.ts +49 -0
  48. 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 PayloadWrapper => {
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?.jsonPayload()
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>(obj: unknown, payloads?: P[]): Promise<BoundWitnessWrapper<T, P>> {
60
- const hydratedObj = await PayloadBuilder.build(typeof obj === 'string' ? JSON.parse(obj) : obj)
61
- assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')
62
- switch (typeof hydratedObj) {
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
- return hydratedObj instanceof BoundWitnessWrapper
65
- ? hydratedObj
66
- : new BoundWitnessWrapper(hydratedObj, payloads ? await Promise.all(payloads?.map((payload) => PayloadBuilder.build(payload))) : [])
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.jsonPayload(), payloads)
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 (payload) => {
124
- result[await BoundWitnessWrapper.hash(payload)] = await BoundWitnessWrapper.parse(payload)
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
@@ -1 +1,2 @@
1
1
  export * from './BoundWitnessWrapper'
2
+ export * from './QueryBoundWitnessWrapper'