@xyo-network/boundwitness-wrapper 2.84.19 → 2.85.0
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/index.cjs +26 -22
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +28 -22
- package/dist/browser/index.js.map +1 -1
- package/dist/node/index.cjs +26 -23
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +28 -23
- package/dist/node/index.js.map +1 -1
- package/package.json +6 -6
package/dist/browser/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -33,6 +34,9 @@ var import_boundwitness_validator = require("@xyo-network/boundwitness-validator
|
|
|
33
34
|
var import_hash = require("@xyo-network/hash");
|
|
34
35
|
var import_payload_wrapper = require("@xyo-network/payload-wrapper");
|
|
35
36
|
var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrapper.PayloadWrapperBase {
|
|
37
|
+
static {
|
|
38
|
+
__name(this, "BoundWitnessWrapper");
|
|
39
|
+
}
|
|
36
40
|
_allPayloadMap;
|
|
37
41
|
_moduleErrors;
|
|
38
42
|
_payloadMap;
|
|
@@ -73,12 +77,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
73
77
|
}
|
|
74
78
|
static async mapPayloads(payloads) {
|
|
75
79
|
const result = {};
|
|
76
|
-
const payloadPairs = await Promise.all(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
const payloadPairs = await Promise.all(payloads?.map(async (payload) => {
|
|
81
|
+
const unwrapped = (0, import_assert.assertEx)(import_payload_wrapper.PayloadWrapper.unwrap(payload));
|
|
82
|
+
return [
|
|
83
|
+
unwrapped,
|
|
84
|
+
await import_hash.PayloadHasher.hashAsync(unwrapped)
|
|
85
|
+
];
|
|
86
|
+
}));
|
|
82
87
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
83
88
|
result[payloadHash] = payload;
|
|
84
89
|
}
|
|
@@ -86,12 +91,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
86
91
|
}
|
|
87
92
|
static async mapWrappedPayloads(payloads) {
|
|
88
93
|
const result = {};
|
|
89
|
-
const payloadPairs = await Promise.all(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
const payloadPairs = await Promise.all(payloads?.map(async (payload) => {
|
|
95
|
+
const unwrapped = (0, import_assert.assertEx)(import_payload_wrapper.PayloadWrapper.unwrap(payload));
|
|
96
|
+
return [
|
|
97
|
+
unwrapped,
|
|
98
|
+
await import_hash.PayloadHasher.hashAsync(unwrapped)
|
|
99
|
+
];
|
|
100
|
+
}));
|
|
95
101
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
96
102
|
result[payloadHash] = import_payload_wrapper.PayloadWrapper.wrap(payload);
|
|
97
103
|
}
|
|
@@ -128,11 +134,9 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
128
134
|
}
|
|
129
135
|
static async wrappedMap(boundWitnesses) {
|
|
130
136
|
const result = {};
|
|
131
|
-
await Promise.all(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
})
|
|
135
|
-
);
|
|
137
|
+
await Promise.all(boundWitnesses.map(async (payload) => {
|
|
138
|
+
result[await _BoundWitnessWrapper.hashAsync(payload)] = _BoundWitnessWrapper.parse(payload);
|
|
139
|
+
}));
|
|
136
140
|
return result;
|
|
137
141
|
}
|
|
138
142
|
async allPayloadMap() {
|
|
@@ -146,10 +150,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
146
150
|
if (innerBoundwitnessIndex > -1) {
|
|
147
151
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
148
152
|
const innerBoundwitnessPayload = (await _BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash];
|
|
149
|
-
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(
|
|
150
|
-
innerBoundwitnessPayload.body(),
|
|
151
|
-
(await import_hash.PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())
|
|
152
|
-
) : void 0;
|
|
153
|
+
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(innerBoundwitnessPayload.body(), (await import_hash.PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())) : void 0;
|
|
153
154
|
if (innerBoundwitness) {
|
|
154
155
|
return innerBoundwitness.dig(depth ? depth - 1 : void 0);
|
|
155
156
|
}
|
|
@@ -200,7 +201,10 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
200
201
|
return this.previousHashes[this.addresses.indexOf(address)];
|
|
201
202
|
}
|
|
202
203
|
toResult() {
|
|
203
|
-
return [
|
|
204
|
+
return [
|
|
205
|
+
this.boundwitness,
|
|
206
|
+
this.payloadsArray.map((payload) => payload.body())
|
|
207
|
+
];
|
|
204
208
|
}
|
|
205
209
|
async validate() {
|
|
206
210
|
return await new import_boundwitness_validator.BoundWitnessValidator(this.boundwitness).validate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":["BoundWitnessWrapper","PayloadWrapperBase","_allPayloadMap","_moduleErrors","_payloadMap","_payloads","isBoundWitnessWrapper","boundwitness","payloads","moduleErrors","compact","filter","exists","map","payload","PayloadWrapper","wrap","error","addresses","obj","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","payloadsArray","Object","values","previousHashes","previous_hashes","as","value","load","address","wrapper","assertEx","isBoundWitness","boundWitness","undefined","mapPayloads","result","payloadPairs","Promise","all","unwrapped","unwrap","PayloadHasher","hashAsync","payloadHash","mapWrappedPayloads","parse","hydratedObj","JSON","Array","isArray","castWrapper","newWrapper","Error","tryParse","wrappedMap","boundWitnesses","allPayloadMap","getAllPayloads","dig","depth","innerBoundwitnessIndex","indexOf","BoundWitnessSchema","innerBoundwitnessHash","innerBoundwitnessPayload","getPayloads","innerBoundwitness","body","filterExclude","item","getAllWrappedPayloads","getMissingPayloads","payloadMap","hash","getWrappedPayloads","getWrappedModuleErrors","hashesBySchema","schema","index","payloadSchema","entries","push","payloadsByHashes","hashes","payloadsBySchema","prev","toResult","validate","BoundWitnessValidator"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/BoundWitnessWrapper.ts
|
|
2
5
|
import { assertEx } from "@xylabs/assert";
|
|
3
6
|
import { exists } from "@xylabs/exists";
|
|
@@ -7,6 +10,9 @@ import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
|
|
|
7
10
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
8
11
|
import { PayloadWrapper, PayloadWrapperBase } from "@xyo-network/payload-wrapper";
|
|
9
12
|
var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase {
|
|
13
|
+
static {
|
|
14
|
+
__name(this, "BoundWitnessWrapper");
|
|
15
|
+
}
|
|
10
16
|
_allPayloadMap;
|
|
11
17
|
_moduleErrors;
|
|
12
18
|
_payloadMap;
|
|
@@ -47,12 +53,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
47
53
|
}
|
|
48
54
|
static async mapPayloads(payloads) {
|
|
49
55
|
const result = {};
|
|
50
|
-
const payloadPairs = await Promise.all(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
const payloadPairs = await Promise.all(payloads?.map(async (payload) => {
|
|
57
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap(payload));
|
|
58
|
+
return [
|
|
59
|
+
unwrapped,
|
|
60
|
+
await PayloadHasher.hashAsync(unwrapped)
|
|
61
|
+
];
|
|
62
|
+
}));
|
|
56
63
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
57
64
|
result[payloadHash] = payload;
|
|
58
65
|
}
|
|
@@ -60,12 +67,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
60
67
|
}
|
|
61
68
|
static async mapWrappedPayloads(payloads) {
|
|
62
69
|
const result = {};
|
|
63
|
-
const payloadPairs = await Promise.all(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
const payloadPairs = await Promise.all(payloads?.map(async (payload) => {
|
|
71
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap(payload));
|
|
72
|
+
return [
|
|
73
|
+
unwrapped,
|
|
74
|
+
await PayloadHasher.hashAsync(unwrapped)
|
|
75
|
+
];
|
|
76
|
+
}));
|
|
69
77
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
70
78
|
result[payloadHash] = PayloadWrapper.wrap(payload);
|
|
71
79
|
}
|
|
@@ -102,11 +110,9 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
102
110
|
}
|
|
103
111
|
static async wrappedMap(boundWitnesses) {
|
|
104
112
|
const result = {};
|
|
105
|
-
await Promise.all(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
})
|
|
109
|
-
);
|
|
113
|
+
await Promise.all(boundWitnesses.map(async (payload) => {
|
|
114
|
+
result[await _BoundWitnessWrapper.hashAsync(payload)] = _BoundWitnessWrapper.parse(payload);
|
|
115
|
+
}));
|
|
110
116
|
return result;
|
|
111
117
|
}
|
|
112
118
|
async allPayloadMap() {
|
|
@@ -120,10 +126,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
120
126
|
if (innerBoundwitnessIndex > -1) {
|
|
121
127
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
122
128
|
const innerBoundwitnessPayload = (await _BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash];
|
|
123
|
-
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(
|
|
124
|
-
innerBoundwitnessPayload.body(),
|
|
125
|
-
(await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())
|
|
126
|
-
) : void 0;
|
|
129
|
+
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(innerBoundwitnessPayload.body(), (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())) : void 0;
|
|
127
130
|
if (innerBoundwitness) {
|
|
128
131
|
return innerBoundwitness.dig(depth ? depth - 1 : void 0);
|
|
129
132
|
}
|
|
@@ -174,7 +177,10 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
174
177
|
return this.previousHashes[this.addresses.indexOf(address)];
|
|
175
178
|
}
|
|
176
179
|
toResult() {
|
|
177
|
-
return [
|
|
180
|
+
return [
|
|
181
|
+
this.boundwitness,
|
|
182
|
+
this.payloadsArray.map((payload) => payload.body())
|
|
183
|
+
];
|
|
178
184
|
}
|
|
179
185
|
async validate() {
|
|
180
186
|
return await new BoundWitnessValidator(this.boundwitness).validate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadHasher","PayloadWrapper","PayloadWrapperBase","BoundWitnessWrapper","PayloadWrapperBase","_allPayloadMap","_moduleErrors","_payloadMap","_payloads","isBoundWitnessWrapper","boundwitness","payloads","moduleErrors","compact","filter","exists","map","payload","PayloadWrapper","wrap","error","addresses","obj","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","payloadsArray","Object","values","previousHashes","previous_hashes","as","value","load","address","wrapper","assertEx","isBoundWitness","boundWitness","undefined","mapPayloads","result","payloadPairs","Promise","all","unwrapped","unwrap","PayloadHasher","hashAsync","payloadHash","mapWrappedPayloads","parse","hydratedObj","JSON","Array","isArray","castWrapper","newWrapper","Error","tryParse","wrappedMap","boundWitnesses","allPayloadMap","getAllPayloads","dig","depth","innerBoundwitnessIndex","indexOf","BoundWitnessSchema","innerBoundwitnessHash","innerBoundwitnessPayload","getPayloads","innerBoundwitness","body","filterExclude","item","getAllWrappedPayloads","getMissingPayloads","payloadMap","hash","getWrappedPayloads","getWrappedModuleErrors","hashesBySchema","schema","index","payloadSchema","entries","push","payloadsByHashes","hashes","payloadsBySchema","prev","toResult","validate","BoundWitnessValidator"]}
|
package/dist/node/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -32,7 +33,7 @@ var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
|
32
33
|
var import_boundwitness_validator = require("@xyo-network/boundwitness-validator");
|
|
33
34
|
var import_hash = require("@xyo-network/hash");
|
|
34
35
|
var import_payload_wrapper = require("@xyo-network/payload-wrapper");
|
|
35
|
-
var
|
|
36
|
+
var _BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrapper.PayloadWrapperBase {
|
|
36
37
|
_allPayloadMap;
|
|
37
38
|
_moduleErrors;
|
|
38
39
|
_payloadMap;
|
|
@@ -73,12 +74,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
73
74
|
}
|
|
74
75
|
static async mapPayloads(payloads) {
|
|
75
76
|
const result = {};
|
|
76
|
-
const payloadPairs = await Promise.all(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
const payloadPairs = await Promise.all(payloads == null ? void 0 : payloads.map(async (payload) => {
|
|
78
|
+
const unwrapped = (0, import_assert.assertEx)(import_payload_wrapper.PayloadWrapper.unwrap(payload));
|
|
79
|
+
return [
|
|
80
|
+
unwrapped,
|
|
81
|
+
await import_hash.PayloadHasher.hashAsync(unwrapped)
|
|
82
|
+
];
|
|
83
|
+
}));
|
|
82
84
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
83
85
|
result[payloadHash] = payload;
|
|
84
86
|
}
|
|
@@ -86,12 +88,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
86
88
|
}
|
|
87
89
|
static async mapWrappedPayloads(payloads) {
|
|
88
90
|
const result = {};
|
|
89
|
-
const payloadPairs = await Promise.all(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
const payloadPairs = await Promise.all(payloads == null ? void 0 : payloads.map(async (payload) => {
|
|
92
|
+
const unwrapped = (0, import_assert.assertEx)(import_payload_wrapper.PayloadWrapper.unwrap(payload));
|
|
93
|
+
return [
|
|
94
|
+
unwrapped,
|
|
95
|
+
await import_hash.PayloadHasher.hashAsync(unwrapped)
|
|
96
|
+
];
|
|
97
|
+
}));
|
|
95
98
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
96
99
|
result[payloadHash] = import_payload_wrapper.PayloadWrapper.wrap(payload);
|
|
97
100
|
}
|
|
@@ -128,11 +131,9 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
128
131
|
}
|
|
129
132
|
static async wrappedMap(boundWitnesses) {
|
|
130
133
|
const result = {};
|
|
131
|
-
await Promise.all(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
})
|
|
135
|
-
);
|
|
134
|
+
await Promise.all(boundWitnesses.map(async (payload) => {
|
|
135
|
+
result[await _BoundWitnessWrapper.hashAsync(payload)] = _BoundWitnessWrapper.parse(payload);
|
|
136
|
+
}));
|
|
136
137
|
return result;
|
|
137
138
|
}
|
|
138
139
|
async allPayloadMap() {
|
|
@@ -146,10 +147,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
146
147
|
if (innerBoundwitnessIndex > -1) {
|
|
147
148
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
148
149
|
const innerBoundwitnessPayload = (await _BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash];
|
|
149
|
-
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(
|
|
150
|
-
innerBoundwitnessPayload.body(),
|
|
151
|
-
(await import_hash.PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())
|
|
152
|
-
) : void 0;
|
|
150
|
+
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(innerBoundwitnessPayload.body(), (await import_hash.PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())) : void 0;
|
|
153
151
|
if (innerBoundwitness) {
|
|
154
152
|
return innerBoundwitness.dig(depth ? depth - 1 : void 0);
|
|
155
153
|
}
|
|
@@ -200,12 +198,17 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
200
198
|
return this.previousHashes[this.addresses.indexOf(address)];
|
|
201
199
|
}
|
|
202
200
|
toResult() {
|
|
203
|
-
return [
|
|
201
|
+
return [
|
|
202
|
+
this.boundwitness,
|
|
203
|
+
this.payloadsArray.map((payload) => payload.body())
|
|
204
|
+
];
|
|
204
205
|
}
|
|
205
206
|
async validate() {
|
|
206
207
|
return await new import_boundwitness_validator.BoundWitnessValidator(this.boundwitness).validate();
|
|
207
208
|
}
|
|
208
209
|
};
|
|
210
|
+
__name(_BoundWitnessWrapper, "BoundWitnessWrapper");
|
|
211
|
+
var BoundWitnessWrapper = _BoundWitnessWrapper;
|
|
209
212
|
// Annotate the CommonJS export names for ESM import in node:
|
|
210
213
|
0 && (module.exports = {
|
|
211
214
|
BoundWitnessWrapper
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/BoundWitnessWrapper.ts"],"sourcesContent":["export * from './BoundWitnessWrapper'\n","import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":["BoundWitnessWrapper","PayloadWrapperBase","_allPayloadMap","_moduleErrors","_payloadMap","_payloads","isBoundWitnessWrapper","boundwitness","payloads","moduleErrors","compact","filter","exists","map","payload","PayloadWrapper","wrap","error","addresses","obj","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","payloadsArray","Object","values","previousHashes","previous_hashes","as","value","load","address","wrapper","assertEx","isBoundWitness","boundWitness","undefined","mapPayloads","result","payloadPairs","Promise","all","unwrapped","unwrap","PayloadHasher","hashAsync","payloadHash","mapWrappedPayloads","parse","hydratedObj","JSON","Array","isArray","castWrapper","newWrapper","Error","tryParse","wrappedMap","boundWitnesses","allPayloadMap","getAllPayloads","dig","depth","innerBoundwitnessIndex","indexOf","BoundWitnessSchema","innerBoundwitnessHash","innerBoundwitnessPayload","getPayloads","innerBoundwitness","body","filterExclude","item","getAllWrappedPayloads","getMissingPayloads","payloadMap","hash","getWrappedPayloads","getWrappedModuleErrors","hashesBySchema","schema","index","payloadSchema","entries","push","payloadsByHashes","hashes","payloadsBySchema","prev","toResult","validate","BoundWitnessValidator"]}
|
package/dist/node/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/BoundWitnessWrapper.ts
|
|
2
5
|
import { assertEx } from "@xylabs/assert";
|
|
3
6
|
import { exists } from "@xylabs/exists";
|
|
@@ -6,7 +9,7 @@ import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-mo
|
|
|
6
9
|
import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
|
|
7
10
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
8
11
|
import { PayloadWrapper, PayloadWrapperBase } from "@xyo-network/payload-wrapper";
|
|
9
|
-
var
|
|
12
|
+
var _BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase {
|
|
10
13
|
_allPayloadMap;
|
|
11
14
|
_moduleErrors;
|
|
12
15
|
_payloadMap;
|
|
@@ -47,12 +50,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
47
50
|
}
|
|
48
51
|
static async mapPayloads(payloads) {
|
|
49
52
|
const result = {};
|
|
50
|
-
const payloadPairs = await Promise.all(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
const payloadPairs = await Promise.all(payloads == null ? void 0 : payloads.map(async (payload) => {
|
|
54
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap(payload));
|
|
55
|
+
return [
|
|
56
|
+
unwrapped,
|
|
57
|
+
await PayloadHasher.hashAsync(unwrapped)
|
|
58
|
+
];
|
|
59
|
+
}));
|
|
56
60
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
57
61
|
result[payloadHash] = payload;
|
|
58
62
|
}
|
|
@@ -60,12 +64,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
60
64
|
}
|
|
61
65
|
static async mapWrappedPayloads(payloads) {
|
|
62
66
|
const result = {};
|
|
63
|
-
const payloadPairs = await Promise.all(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
const payloadPairs = await Promise.all(payloads == null ? void 0 : payloads.map(async (payload) => {
|
|
68
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap(payload));
|
|
69
|
+
return [
|
|
70
|
+
unwrapped,
|
|
71
|
+
await PayloadHasher.hashAsync(unwrapped)
|
|
72
|
+
];
|
|
73
|
+
}));
|
|
69
74
|
for (const [payload, payloadHash] of payloadPairs) {
|
|
70
75
|
result[payloadHash] = PayloadWrapper.wrap(payload);
|
|
71
76
|
}
|
|
@@ -102,11 +107,9 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
102
107
|
}
|
|
103
108
|
static async wrappedMap(boundWitnesses) {
|
|
104
109
|
const result = {};
|
|
105
|
-
await Promise.all(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
})
|
|
109
|
-
);
|
|
110
|
+
await Promise.all(boundWitnesses.map(async (payload) => {
|
|
111
|
+
result[await _BoundWitnessWrapper.hashAsync(payload)] = _BoundWitnessWrapper.parse(payload);
|
|
112
|
+
}));
|
|
110
113
|
return result;
|
|
111
114
|
}
|
|
112
115
|
async allPayloadMap() {
|
|
@@ -120,10 +123,7 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
120
123
|
if (innerBoundwitnessIndex > -1) {
|
|
121
124
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
122
125
|
const innerBoundwitnessPayload = (await _BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash];
|
|
123
|
-
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(
|
|
124
|
-
innerBoundwitnessPayload.body(),
|
|
125
|
-
(await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())
|
|
126
|
-
) : void 0;
|
|
126
|
+
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(innerBoundwitnessPayload.body(), (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())) : void 0;
|
|
127
127
|
if (innerBoundwitness) {
|
|
128
128
|
return innerBoundwitness.dig(depth ? depth - 1 : void 0);
|
|
129
129
|
}
|
|
@@ -174,12 +174,17 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase
|
|
|
174
174
|
return this.previousHashes[this.addresses.indexOf(address)];
|
|
175
175
|
}
|
|
176
176
|
toResult() {
|
|
177
|
-
return [
|
|
177
|
+
return [
|
|
178
|
+
this.boundwitness,
|
|
179
|
+
this.payloadsArray.map((payload) => payload.body())
|
|
180
|
+
];
|
|
178
181
|
}
|
|
179
182
|
async validate() {
|
|
180
183
|
return await new BoundWitnessValidator(this.boundwitness).validate();
|
|
181
184
|
}
|
|
182
185
|
};
|
|
186
|
+
__name(_BoundWitnessWrapper, "BoundWitnessWrapper");
|
|
187
|
+
var BoundWitnessWrapper = _BoundWitnessWrapper;
|
|
183
188
|
export {
|
|
184
189
|
BoundWitnessWrapper
|
|
185
190
|
};
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/BoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { compact } from '@xylabs/lodash'\nimport { Promisable } from '@xylabs/promise'\nimport { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload } from '@xyo-network/payload-model'\nimport { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'\n\nexport class BoundWitnessWrapper<\n TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness,\n TPayload extends Payload = Payload,\n> extends PayloadWrapperBase<TBoundWitness> {\n private _allPayloadMap: Record<string, TPayload> | undefined\n private _moduleErrors: PayloadWrapper[]\n private _payloadMap: Record<string, TPayload> | undefined\n private _payloads: PayloadWrapper<TPayload>[]\n private isBoundWitnessWrapper = true\n\n protected constructor(boundwitness: TBoundWitness, payloads?: (TPayload | undefined)[], moduleErrors?: (Payload | undefined)[]) {\n super(boundwitness)\n this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap<TPayload>(payload))) : []\n this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap<Payload>(error))) : []\n }\n\n get addresses() {\n return this.boundwitness.addresses\n }\n\n get boundwitness() {\n return this.obj\n }\n\n get payloadHashes() {\n return this.boundwitness.payload_hashes\n }\n\n get payloadSchemas() {\n return this.boundwitness.payload_schemas\n }\n\n get payloadsArray(): PayloadWrapper<TPayload>[] {\n return Object.values(this._payloads ?? {})\n }\n\n get previousHashes() {\n return this.boundwitness.previous_hashes\n }\n\n static as<T extends BoundWitness = BoundWitness>(value: unknown) {\n return value instanceof BoundWitnessWrapper ? (value as BoundWitnessWrapper<T>) : null\n }\n\n static async load(address: string) {\n const wrapper = await PayloadWrapper.load(address)\n const payload = wrapper?.payload()\n assertEx(payload && isBoundWitness(payload), 'Attempt to load non-boundwitness')\n\n const boundWitness: BoundWitness | undefined = payload && isBoundWitness(payload) ? payload : undefined\n return boundWitness ? BoundWitnessWrapper.wrap(boundWitness) : null\n }\n\n static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {\n const result: Record<string, TPayload> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = payload\n }\n return result\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n const result: Record<string, PayloadWrapper<TPayload>> = {}\n const payloadPairs = await Promise.all(\n payloads?.map<Promise<[TPayload, string]>>(async (payload) => {\n const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))\n return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]\n }),\n )\n\n for (const [payload, payloadHash] of payloadPairs) {\n result[payloadHash] = PayloadWrapper.wrap(payload)\n }\n return result\n }\n\n static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {\n const hydratedObj = typeof obj === 'string' ? JSON.parse(obj) : obj\n assertEx(!Array.isArray(hydratedObj), 'Array can not be converted to BoundWitnessWrapper')\n switch (typeof hydratedObj) {\n case 'object': {\n const castWrapper = hydratedObj as BoundWitnessWrapper<T, P>\n const newWrapper = castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(hydratedObj as T, payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {\n if (obj === undefined) return undefined\n try {\n return this.parse(obj, payloads)\n } catch {\n return undefined\n }\n }\n\n static wrap<T extends BoundWitness, P extends Payload>(obj: PayloadWrapperBase<T> | T, payloads?: P[]): BoundWitnessWrapper<T, P> {\n switch (typeof obj) {\n case 'object': {\n const newWrapper = new BoundWitnessWrapper<T, P>(assertEx(BoundWitnessWrapper.unwrap<T>(obj)), payloads)\n /*if (!newWrapper.getValid()) {\n console.warn('Wrapped invalid BoundWitness')\n }*/\n return newWrapper\n }\n }\n }\n\n static async wrappedMap<T extends BoundWitness>(boundWitnesses: (T | BoundWitnessWrapper<T>)[]): Promise<Record<string, BoundWitnessWrapper<T>>> {\n const result: Record<string, BoundWitnessWrapper<T>> = {}\n await Promise.all(\n boundWitnesses.map(async (payload) => {\n result[await BoundWitnessWrapper.hashAsync(payload)] = BoundWitnessWrapper.parse(payload)\n }),\n )\n return result\n }\n\n async allPayloadMap(): Promise<Record<string, TPayload>> {\n this._allPayloadMap = this._allPayloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getAllPayloads()))\n return this._allPayloadMap\n }\n\n async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {\n if (depth === 0) return this\n\n const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)\n if (innerBoundwitnessIndex > -1) {\n const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]\n const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]\n const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload\n ? new BoundWitnessWrapper<TBoundWitness>(\n innerBoundwitnessPayload.body() as unknown as TBoundWitness,\n (await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body() as unknown as TBoundWitness),\n )\n : undefined\n if (innerBoundwitness) {\n return innerBoundwitness.dig(depth ? depth - 1 : undefined)\n }\n }\n assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)\n return this\n }\n\n async getAllPayloads(): Promise<TPayload[]> {\n return (await this.getAllWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getAllWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n async getMissingPayloads() {\n const payloadMap = await BoundWitnessWrapper.mapPayloads(await this.getPayloads())\n return this.payloadHashes.filter((hash) => !payloadMap[hash])\n }\n\n async getPayloads(): Promise<TPayload[]> {\n return (await this.getWrappedPayloads()).map((wrapper) => wrapper.payload())\n }\n\n getWrappedModuleErrors(): Promisable<PayloadWrapper[]> {\n return this._moduleErrors\n }\n\n getWrappedPayloads(): Promisable<PayloadWrapper<TPayload>[]> {\n return this._payloads\n }\n\n hashesBySchema(schema: string) {\n const result: string[] = []\n for (const [index, payloadSchema] of this.payloadSchemas.entries()) {\n if (payloadSchema === schema) {\n result.push(this.payloadHashes[index])\n }\n }\n return result\n }\n\n async payloadMap(): Promise<Record<string, TPayload>> {\n this._payloadMap = this._payloadMap ?? (await BoundWitnessWrapper.mapPayloads<TPayload>(await this.getPayloads()))\n return this._payloadMap\n }\n\n async payloadsByHashes<T extends TPayload>(hashes: string[]): Promise<T[]> {\n const map = await this.payloadMap()\n return hashes.map<T>((hash) => assertEx(map[hash], 'Hash not found') as T)\n }\n\n async payloadsBySchema<T extends TPayload>(schema: string): Promise<T[]> {\n return (await this.getPayloads()).filter((payload) => payload?.schema === schema) as T[]\n }\n\n prev(address: string) {\n return this.previousHashes[this.addresses.indexOf(address)]\n }\n\n toResult() {\n return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())]\n }\n\n override async validate(): Promise<Error[]> {\n return await new BoundWitnessValidator(this.boundwitness).validate()\n }\n}\n"],"mappings":"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","names":["assertEx","exists","compact","BoundWitnessSchema","isBoundWitness","BoundWitnessValidator","PayloadHasher","PayloadWrapper","PayloadWrapperBase","BoundWitnessWrapper","PayloadWrapperBase","_allPayloadMap","_moduleErrors","_payloadMap","_payloads","isBoundWitnessWrapper","boundwitness","payloads","moduleErrors","compact","filter","exists","map","payload","PayloadWrapper","wrap","error","addresses","obj","payloadHashes","payload_hashes","payloadSchemas","payload_schemas","payloadsArray","Object","values","previousHashes","previous_hashes","as","value","load","address","wrapper","assertEx","isBoundWitness","boundWitness","undefined","mapPayloads","result","payloadPairs","Promise","all","unwrapped","unwrap","PayloadHasher","hashAsync","payloadHash","mapWrappedPayloads","parse","hydratedObj","JSON","Array","isArray","castWrapper","newWrapper","Error","tryParse","wrappedMap","boundWitnesses","allPayloadMap","getAllPayloads","dig","depth","innerBoundwitnessIndex","indexOf","BoundWitnessSchema","innerBoundwitnessHash","innerBoundwitnessPayload","getPayloads","innerBoundwitness","body","filterExclude","item","getAllWrappedPayloads","getMissingPayloads","payloadMap","hash","getWrappedPayloads","getWrappedModuleErrors","hashesBySchema","schema","index","payloadSchema","entries","push","payloadsByHashes","hashes","payloadsBySchema","prev","toResult","validate","BoundWitnessValidator"]}
|
package/package.json
CHANGED
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"@xylabs/exists": "^2.13.20",
|
|
15
15
|
"@xylabs/lodash": "^2.13.20",
|
|
16
16
|
"@xylabs/promise": "^2.13.20",
|
|
17
|
-
"@xyo-network/boundwitness-model": "~2.
|
|
18
|
-
"@xyo-network/boundwitness-validator": "~2.
|
|
19
|
-
"@xyo-network/hash": "~2.
|
|
20
|
-
"@xyo-network/payload-model": "~2.
|
|
21
|
-
"@xyo-network/payload-wrapper": "~2.
|
|
17
|
+
"@xyo-network/boundwitness-model": "~2.85.0",
|
|
18
|
+
"@xyo-network/boundwitness-validator": "~2.85.0",
|
|
19
|
+
"@xyo-network/hash": "~2.85.0",
|
|
20
|
+
"@xyo-network/payload-model": "~2.85.0",
|
|
21
|
+
"@xyo-network/payload-wrapper": "~2.85.0"
|
|
22
22
|
},
|
|
23
23
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
24
24
|
"devDependencies": {
|
|
@@ -64,6 +64,6 @@
|
|
|
64
64
|
},
|
|
65
65
|
"sideEffects": false,
|
|
66
66
|
"types": "dist/node/index.d.ts",
|
|
67
|
-
"version": "2.
|
|
67
|
+
"version": "2.85.0",
|
|
68
68
|
"type": "module"
|
|
69
69
|
}
|