@xyo-network/boundwitness-wrapper 2.84.6 → 2.84.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/BoundWitnessWrapper.d.cts.map +1 -1
- package/dist/browser/BoundWitnessWrapper.d.mts.map +1 -1
- package/dist/browser/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/browser/index.cjs +21 -22
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +21 -22
- package/dist/browser/index.js.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.cts.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.mts.map +1 -1
- package/dist/node/BoundWitnessWrapper.d.ts.map +1 -1
- package/dist/node/index.cjs +213 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.js +46 -74
- package/dist/node/index.js.map +1 -1
- package/package.json +14 -14
- package/src/BoundWitnessWrapper.ts +31 -34
- package/dist/node/index.mjs +0 -187
- package/dist/node/index.mjs.map +0 -1
|
@@ -0,0 +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":[]}
|
package/dist/node/index.js
CHANGED
|
@@ -1,38 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var src_exports = {};
|
|
22
|
-
__export(src_exports, {
|
|
23
|
-
BoundWitnessWrapper: () => BoundWitnessWrapper
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(src_exports);
|
|
26
|
-
|
|
27
1
|
// src/BoundWitnessWrapper.ts
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var BoundWitnessWrapper = class _BoundWitnessWrapper extends
|
|
2
|
+
import { assertEx } from "@xylabs/assert";
|
|
3
|
+
import { exists } from "@xylabs/exists";
|
|
4
|
+
import { compact } from "@xylabs/lodash";
|
|
5
|
+
import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
6
|
+
import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
|
|
7
|
+
import { PayloadHasher } from "@xyo-network/hash";
|
|
8
|
+
import { PayloadWrapper, PayloadWrapperBase } from "@xyo-network/payload-wrapper";
|
|
9
|
+
var BoundWitnessWrapper = class _BoundWitnessWrapper extends PayloadWrapperBase {
|
|
36
10
|
_allPayloadMap;
|
|
37
11
|
_moduleErrors;
|
|
38
12
|
_payloadMap;
|
|
@@ -40,8 +14,8 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
40
14
|
isBoundWitnessWrapper = true;
|
|
41
15
|
constructor(boundwitness, payloads, moduleErrors) {
|
|
42
16
|
super(boundwitness);
|
|
43
|
-
this._payloads = payloads ?
|
|
44
|
-
this._moduleErrors = moduleErrors ?
|
|
17
|
+
this._payloads = payloads ? compact(payloads.filter(exists).map((payload) => PayloadWrapper.wrap(payload))) : [];
|
|
18
|
+
this._moduleErrors = moduleErrors ? compact(moduleErrors.filter(exists).map((error) => PayloadWrapper.wrap(error))) : [];
|
|
45
19
|
}
|
|
46
20
|
get addresses() {
|
|
47
21
|
return this.boundwitness.addresses;
|
|
@@ -65,43 +39,41 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
65
39
|
return value instanceof _BoundWitnessWrapper ? value : null;
|
|
66
40
|
}
|
|
67
41
|
static async load(address) {
|
|
68
|
-
const wrapper = await
|
|
42
|
+
const wrapper = await PayloadWrapper.load(address);
|
|
69
43
|
const payload = wrapper == null ? void 0 : wrapper.payload();
|
|
70
|
-
|
|
71
|
-
const boundWitness = payload &&
|
|
44
|
+
assertEx(payload && isBoundWitness(payload), "Attempt to load non-boundwitness");
|
|
45
|
+
const boundWitness = payload && isBoundWitness(payload) ? payload : void 0;
|
|
72
46
|
return boundWitness ? _BoundWitnessWrapper.wrap(boundWitness) : null;
|
|
73
47
|
}
|
|
74
48
|
static async mapPayloads(payloads) {
|
|
75
|
-
|
|
49
|
+
const result = {};
|
|
50
|
+
const payloadPairs = await Promise.all(
|
|
76
51
|
payloads == null ? void 0 : payloads.map(async (payload) => {
|
|
77
|
-
const unwrapped =
|
|
78
|
-
return [unwrapped, await
|
|
52
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap(payload));
|
|
53
|
+
return [unwrapped, await PayloadHasher.hashAsync(unwrapped)];
|
|
79
54
|
})
|
|
80
|
-
)).reduce(
|
|
81
|
-
(map, [payload, payloadHash]) => {
|
|
82
|
-
map[payloadHash] = payload;
|
|
83
|
-
return map;
|
|
84
|
-
},
|
|
85
|
-
{}
|
|
86
55
|
);
|
|
56
|
+
for (const [payload, payloadHash] of payloadPairs) {
|
|
57
|
+
result[payloadHash] = payload;
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
87
60
|
}
|
|
88
61
|
static async mapWrappedPayloads(payloads) {
|
|
89
|
-
|
|
62
|
+
const result = {};
|
|
63
|
+
const payloadPairs = await Promise.all(
|
|
90
64
|
payloads == null ? void 0 : payloads.map(async (payload) => {
|
|
91
|
-
const unwrapped =
|
|
92
|
-
return [unwrapped, await
|
|
65
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap(payload));
|
|
66
|
+
return [unwrapped, await PayloadHasher.hashAsync(unwrapped)];
|
|
93
67
|
})
|
|
94
|
-
)).reduce(
|
|
95
|
-
(map, [payload, payloadHash]) => {
|
|
96
|
-
map[payloadHash] = import_payload_wrapper.PayloadWrapper.wrap(payload);
|
|
97
|
-
return map;
|
|
98
|
-
},
|
|
99
|
-
{}
|
|
100
68
|
);
|
|
69
|
+
for (const [payload, payloadHash] of payloadPairs) {
|
|
70
|
+
result[payloadHash] = PayloadWrapper.wrap(payload);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
101
73
|
}
|
|
102
74
|
static parse(obj, payloads) {
|
|
103
75
|
const hydratedObj = typeof obj === "string" ? JSON.parse(obj) : obj;
|
|
104
|
-
|
|
76
|
+
assertEx(!Array.isArray(hydratedObj), "Array can not be converted to BoundWitnessWrapper");
|
|
105
77
|
switch (typeof hydratedObj) {
|
|
106
78
|
case "object": {
|
|
107
79
|
const castWrapper = hydratedObj;
|
|
@@ -109,21 +81,21 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
109
81
|
return newWrapper;
|
|
110
82
|
}
|
|
111
83
|
}
|
|
112
|
-
throw Error(`Unable to parse [${typeof obj}]`);
|
|
84
|
+
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
113
85
|
}
|
|
114
86
|
static tryParse(obj, payloads) {
|
|
115
87
|
if (obj === void 0)
|
|
116
88
|
return void 0;
|
|
117
89
|
try {
|
|
118
90
|
return this.parse(obj, payloads);
|
|
119
|
-
} catch
|
|
91
|
+
} catch {
|
|
120
92
|
return void 0;
|
|
121
93
|
}
|
|
122
94
|
}
|
|
123
95
|
static wrap(obj, payloads) {
|
|
124
96
|
switch (typeof obj) {
|
|
125
97
|
case "object": {
|
|
126
|
-
const newWrapper = new _BoundWitnessWrapper(
|
|
98
|
+
const newWrapper = new _BoundWitnessWrapper(assertEx(_BoundWitnessWrapper.unwrap(obj)), payloads);
|
|
127
99
|
return newWrapper;
|
|
128
100
|
}
|
|
129
101
|
}
|
|
@@ -144,19 +116,19 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
144
116
|
async dig(depth) {
|
|
145
117
|
if (depth === 0)
|
|
146
118
|
return this;
|
|
147
|
-
const innerBoundwitnessIndex = this.payloadSchemas.
|
|
119
|
+
const innerBoundwitnessIndex = this.payloadSchemas.indexOf(BoundWitnessSchema);
|
|
148
120
|
if (innerBoundwitnessIndex > -1) {
|
|
149
121
|
const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
|
|
150
122
|
const innerBoundwitnessPayload = (await _BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash];
|
|
151
123
|
const innerBoundwitness = innerBoundwitnessPayload ? new _BoundWitnessWrapper(
|
|
152
124
|
innerBoundwitnessPayload.body(),
|
|
153
|
-
(await
|
|
125
|
+
(await PayloadHasher.filterExclude(this.payloadsArray, innerBoundwitnessHash)).map((item) => item.body())
|
|
154
126
|
) : void 0;
|
|
155
127
|
if (innerBoundwitness) {
|
|
156
128
|
return innerBoundwitness.dig(depth ? depth - 1 : void 0);
|
|
157
129
|
}
|
|
158
130
|
}
|
|
159
|
-
|
|
131
|
+
assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`);
|
|
160
132
|
return this;
|
|
161
133
|
}
|
|
162
134
|
async getAllPayloads() {
|
|
@@ -179,12 +151,13 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
179
151
|
return this._payloads;
|
|
180
152
|
}
|
|
181
153
|
hashesBySchema(schema) {
|
|
182
|
-
|
|
154
|
+
const result = [];
|
|
155
|
+
for (const [index, payloadSchema] of this.payloadSchemas.entries()) {
|
|
183
156
|
if (payloadSchema === schema) {
|
|
184
|
-
|
|
157
|
+
result.push(this.payloadHashes[index]);
|
|
185
158
|
}
|
|
186
|
-
|
|
187
|
-
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
188
161
|
}
|
|
189
162
|
async payloadMap() {
|
|
190
163
|
this._payloadMap = this._payloadMap ?? await _BoundWitnessWrapper.mapPayloads(await this.getPayloads());
|
|
@@ -192,23 +165,22 @@ var BoundWitnessWrapper = class _BoundWitnessWrapper extends import_payload_wrap
|
|
|
192
165
|
}
|
|
193
166
|
async payloadsByHashes(hashes) {
|
|
194
167
|
const map = await this.payloadMap();
|
|
195
|
-
return hashes.map((hash) =>
|
|
168
|
+
return hashes.map((hash) => assertEx(map[hash], "Hash not found"));
|
|
196
169
|
}
|
|
197
170
|
async payloadsBySchema(schema) {
|
|
198
171
|
return (await this.getPayloads()).filter((payload) => (payload == null ? void 0 : payload.schema) === schema);
|
|
199
172
|
}
|
|
200
173
|
prev(address) {
|
|
201
|
-
return this.previousHashes[this.addresses.
|
|
174
|
+
return this.previousHashes[this.addresses.indexOf(address)];
|
|
202
175
|
}
|
|
203
176
|
toResult() {
|
|
204
177
|
return [this.boundwitness, this.payloadsArray.map((payload) => payload.body())];
|
|
205
178
|
}
|
|
206
179
|
async validate() {
|
|
207
|
-
return await new
|
|
180
|
+
return await new BoundWitnessValidator(this.boundwitness).validate();
|
|
208
181
|
}
|
|
209
182
|
};
|
|
210
|
-
|
|
211
|
-
0 && (module.exports = {
|
|
183
|
+
export {
|
|
212
184
|
BoundWitnessWrapper
|
|
213
|
-
}
|
|
185
|
+
};
|
|
214
186
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.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 return (\n 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 ).reduce(\n (map, [payload, payloadHash]) => {\n map[payloadHash] = payload\n return map\n },\n {} as Record<string, TPayload>,\n )\n }\n\n static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {\n return (\n 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 ).reduce(\n (map, [payload, payloadHash]) => {\n map[payloadHash] = PayloadWrapper.wrap(payload)\n return map\n },\n {} as Record<string, PayloadWrapper<TPayload>>,\n )\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 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 (_ex) {\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.findIndex((item) => item === 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 return this.payloadSchemas.reduce<string[]>((prev, payloadSchema, index) => {\n if (payloadSchema === schema) {\n prev.push(this.payloadHashes[index])\n }\n return prev\n }, [])\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.findIndex((addr) => address === addr)]\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":[]}
|
package/package.json
CHANGED
|
@@ -14,19 +14,18 @@
|
|
|
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.84.
|
|
18
|
-
"@xyo-network/boundwitness-validator": "~2.84.
|
|
19
|
-
"@xyo-network/hash": "~2.84.
|
|
20
|
-
"@xyo-network/payload-model": "~2.84.
|
|
21
|
-
"@xyo-network/payload-wrapper": "~2.84.
|
|
17
|
+
"@xyo-network/boundwitness-model": "~2.84.7",
|
|
18
|
+
"@xyo-network/boundwitness-validator": "~2.84.7",
|
|
19
|
+
"@xyo-network/hash": "~2.84.7",
|
|
20
|
+
"@xyo-network/payload-model": "~2.84.7",
|
|
21
|
+
"@xyo-network/payload-wrapper": "~2.84.7"
|
|
22
22
|
},
|
|
23
23
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@xylabs/ts-scripts-yarn3": "^3.2.
|
|
26
|
-
"@xylabs/tsconfig": "^3.2.
|
|
25
|
+
"@xylabs/ts-scripts-yarn3": "^3.2.24",
|
|
26
|
+
"@xylabs/tsconfig": "^3.2.24",
|
|
27
27
|
"typescript": "^5.3.3"
|
|
28
28
|
},
|
|
29
|
-
"docs": "dist/docs.json",
|
|
30
29
|
"exports": {
|
|
31
30
|
".": {
|
|
32
31
|
"browser": {
|
|
@@ -41,19 +40,19 @@
|
|
|
41
40
|
},
|
|
42
41
|
"node": {
|
|
43
42
|
"require": {
|
|
44
|
-
"types": "./dist/node/index.d.
|
|
45
|
-
"default": "./dist/node/index.
|
|
43
|
+
"types": "./dist/node/index.d.cts",
|
|
44
|
+
"default": "./dist/node/index.cjs"
|
|
46
45
|
},
|
|
47
46
|
"import": {
|
|
48
47
|
"types": "./dist/node/index.d.mts",
|
|
49
|
-
"default": "./dist/node/index.
|
|
48
|
+
"default": "./dist/node/index.js"
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
51
|
},
|
|
53
52
|
"./package.json": "./package.json"
|
|
54
53
|
},
|
|
55
|
-
"main": "dist/node/index.
|
|
56
|
-
"module": "dist/node/index.
|
|
54
|
+
"main": "dist/node/index.cjs",
|
|
55
|
+
"module": "dist/node/index.js",
|
|
57
56
|
"homepage": "https://xyo.network",
|
|
58
57
|
"license": "LGPL-3.0-only",
|
|
59
58
|
"publishConfig": {
|
|
@@ -65,5 +64,6 @@
|
|
|
65
64
|
},
|
|
66
65
|
"sideEffects": false,
|
|
67
66
|
"types": "dist/node/index.d.ts",
|
|
68
|
-
"version": "2.84.
|
|
67
|
+
"version": "2.84.7",
|
|
68
|
+
"type": "module"
|
|
69
69
|
}
|
|
@@ -62,37 +62,33 @@ export class BoundWitnessWrapper<
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
static async mapPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, TPayload>> {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
)
|
|
72
|
-
).reduce(
|
|
73
|
-
(map, [payload, payloadHash]) => {
|
|
74
|
-
map[payloadHash] = payload
|
|
75
|
-
return map
|
|
76
|
-
},
|
|
77
|
-
{} as Record<string, TPayload>,
|
|
65
|
+
const result: Record<string, TPayload> = {}
|
|
66
|
+
const payloadPairs = await Promise.all(
|
|
67
|
+
payloads?.map<Promise<[TPayload, string]>>(async (payload) => {
|
|
68
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))
|
|
69
|
+
return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]
|
|
70
|
+
}),
|
|
78
71
|
)
|
|
72
|
+
|
|
73
|
+
for (const [payload, payloadHash] of payloadPairs) {
|
|
74
|
+
result[payloadHash] = payload
|
|
75
|
+
}
|
|
76
|
+
return result
|
|
79
77
|
}
|
|
80
78
|
|
|
81
79
|
static async mapWrappedPayloads<TPayload extends Payload>(payloads: TPayload[]): Promise<Record<string, PayloadWrapper<TPayload>>> {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
)
|
|
89
|
-
).reduce(
|
|
90
|
-
(map, [payload, payloadHash]) => {
|
|
91
|
-
map[payloadHash] = PayloadWrapper.wrap(payload)
|
|
92
|
-
return map
|
|
93
|
-
},
|
|
94
|
-
{} as Record<string, PayloadWrapper<TPayload>>,
|
|
80
|
+
const result: Record<string, PayloadWrapper<TPayload>> = {}
|
|
81
|
+
const payloadPairs = await Promise.all(
|
|
82
|
+
payloads?.map<Promise<[TPayload, string]>>(async (payload) => {
|
|
83
|
+
const unwrapped = assertEx(PayloadWrapper.unwrap<TPayload>(payload))
|
|
84
|
+
return [unwrapped, await PayloadHasher.hashAsync(unwrapped)]
|
|
85
|
+
}),
|
|
95
86
|
)
|
|
87
|
+
|
|
88
|
+
for (const [payload, payloadHash] of payloadPairs) {
|
|
89
|
+
result[payloadHash] = PayloadWrapper.wrap(payload)
|
|
90
|
+
}
|
|
91
|
+
return result
|
|
96
92
|
}
|
|
97
93
|
|
|
98
94
|
static parse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> {
|
|
@@ -108,14 +104,14 @@ export class BoundWitnessWrapper<
|
|
|
108
104
|
return newWrapper
|
|
109
105
|
}
|
|
110
106
|
}
|
|
111
|
-
throw Error(`Unable to parse [${typeof obj}]`)
|
|
107
|
+
throw new Error(`Unable to parse [${typeof obj}]`)
|
|
112
108
|
}
|
|
113
109
|
|
|
114
110
|
static tryParse<T extends BoundWitness, P extends Payload>(obj: unknown, payloads?: P[]): BoundWitnessWrapper<T, P> | undefined {
|
|
115
111
|
if (obj === undefined) return undefined
|
|
116
112
|
try {
|
|
117
113
|
return this.parse(obj, payloads)
|
|
118
|
-
} catch
|
|
114
|
+
} catch {
|
|
119
115
|
return undefined
|
|
120
116
|
}
|
|
121
117
|
}
|
|
@@ -150,7 +146,7 @@ export class BoundWitnessWrapper<
|
|
|
150
146
|
async dig(depth?: number): Promise<BoundWitnessWrapper<TBoundWitness>> {
|
|
151
147
|
if (depth === 0) return this
|
|
152
148
|
|
|
153
|
-
const innerBoundwitnessIndex: number = this.payloadSchemas.
|
|
149
|
+
const innerBoundwitnessIndex: number = this.payloadSchemas.indexOf(BoundWitnessSchema)
|
|
154
150
|
if (innerBoundwitnessIndex > -1) {
|
|
155
151
|
const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]
|
|
156
152
|
const innerBoundwitnessPayload = (await BoundWitnessWrapper.mapWrappedPayloads(await this.getPayloads()))[innerBoundwitnessHash]
|
|
@@ -194,12 +190,13 @@ export class BoundWitnessWrapper<
|
|
|
194
190
|
}
|
|
195
191
|
|
|
196
192
|
hashesBySchema(schema: string) {
|
|
197
|
-
|
|
193
|
+
const result: string[] = []
|
|
194
|
+
for (const [index, payloadSchema] of this.payloadSchemas.entries()) {
|
|
198
195
|
if (payloadSchema === schema) {
|
|
199
|
-
|
|
196
|
+
result.push(this.payloadHashes[index])
|
|
200
197
|
}
|
|
201
|
-
|
|
202
|
-
|
|
198
|
+
}
|
|
199
|
+
return result
|
|
203
200
|
}
|
|
204
201
|
|
|
205
202
|
async payloadMap(): Promise<Record<string, TPayload>> {
|
|
@@ -217,7 +214,7 @@ export class BoundWitnessWrapper<
|
|
|
217
214
|
}
|
|
218
215
|
|
|
219
216
|
prev(address: string) {
|
|
220
|
-
return this.previousHashes[this.addresses.
|
|
217
|
+
return this.previousHashes[this.addresses.indexOf(address)]
|
|
221
218
|
}
|
|
222
219
|
|
|
223
220
|
toResult() {
|