@xyo-network/boundwitness-builder 2.84.6 → 2.84.8
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/Builder.d.cts.map +1 -1
- package/dist/browser/Builder.d.mts.map +1 -1
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/index.cjs +10 -9
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +10 -9
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Builder.d.cts.map +1 -1
- package/dist/node/Builder.d.mts.map +1 -1
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/index.cjs +249 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.js +57 -85
- package/dist/node/index.js.map +1 -1
- package/package.json +19 -19
- package/src/Builder.ts +9 -8
- package/src/Query/QueryBoundWitnessValidator.ts +2 -2
- package/src/Query/QueryBoundWitnessWrapper.ts +1 -1
- package/dist/node/index.mjs +0 -219
- package/dist/node/index.mjs.map +0 -1
package/dist/node/index.js
CHANGED
|
@@ -1,46 +1,18 @@
|
|
|
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
|
-
BoundWitnessBuilder: () => BoundWitnessBuilder,
|
|
24
|
-
QueryBoundWitnessBuilder: () => QueryBoundWitnessBuilder,
|
|
25
|
-
QueryBoundWitnessWrapper: () => QueryBoundWitnessWrapper
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(src_exports);
|
|
28
|
-
|
|
29
1
|
// src/Builder.ts
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
2
|
+
import { toArrayBuffer, toUint8Array } from "@xylabs/arraybuffer";
|
|
3
|
+
import { assertEx } from "@xylabs/assert";
|
|
4
|
+
import { hexFromArrayBuffer } from "@xylabs/hex";
|
|
5
|
+
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
6
|
+
import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
7
|
+
import { PayloadHasher, sortFields } from "@xyo-network/hash";
|
|
8
|
+
import { PayloadWrapper } from "@xyo-network/payload";
|
|
9
|
+
import { Mutex } from "async-mutex";
|
|
38
10
|
var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
39
11
|
constructor(config = { inlinePayloads: false }, logger) {
|
|
40
12
|
this.config = config;
|
|
41
13
|
this.logger = logger;
|
|
42
14
|
}
|
|
43
|
-
static _buildMutex = new
|
|
15
|
+
static _buildMutex = new Mutex();
|
|
44
16
|
_accounts = [];
|
|
45
17
|
_errorHashes;
|
|
46
18
|
_errors = [];
|
|
@@ -51,7 +23,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
51
23
|
_timestamp = Date.now();
|
|
52
24
|
get _payload_schemas() {
|
|
53
25
|
return this._payloadSchemas ?? this._payloads.map((payload) => {
|
|
54
|
-
return
|
|
26
|
+
return assertEx(payload.schema, () => this.missingSchemaMessage(payload));
|
|
55
27
|
});
|
|
56
28
|
}
|
|
57
29
|
async build(meta = false) {
|
|
@@ -61,7 +33,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
61
33
|
return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
|
|
62
34
|
var _a;
|
|
63
35
|
const hashableFields = await this.hashableFields();
|
|
64
|
-
const _hash = await
|
|
36
|
+
const _hash = await BoundWitnessWrapper.hashAsync(hashableFields);
|
|
65
37
|
const previousHashes = this._accounts.map((account) => account.previousHash);
|
|
66
38
|
const ret = {
|
|
67
39
|
...hashableFields,
|
|
@@ -81,39 +53,39 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
81
53
|
});
|
|
82
54
|
}
|
|
83
55
|
error(payload) {
|
|
84
|
-
const unwrappedPayload =
|
|
85
|
-
|
|
56
|
+
const unwrappedPayload = PayloadWrapper.unwrap(payload);
|
|
57
|
+
assertEx(this._errorHashes === void 0, "Can not set errors when hashes already set");
|
|
86
58
|
if (unwrappedPayload) {
|
|
87
|
-
this._errors.push(
|
|
59
|
+
this._errors.push(assertEx(sortFields(unwrappedPayload)));
|
|
88
60
|
}
|
|
89
61
|
return this;
|
|
90
62
|
}
|
|
91
63
|
errors(errors) {
|
|
92
|
-
|
|
64
|
+
for (const error of errors ?? []) {
|
|
93
65
|
if (error !== null) {
|
|
94
66
|
this.error(error);
|
|
95
67
|
}
|
|
96
|
-
}
|
|
68
|
+
}
|
|
97
69
|
return this;
|
|
98
70
|
}
|
|
99
71
|
async hashableFields() {
|
|
100
72
|
var _a, _b;
|
|
101
73
|
const addresses = this._accounts.map(
|
|
102
|
-
(account) => account.addressBytes ?
|
|
74
|
+
(account) => account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : void 0
|
|
103
75
|
);
|
|
104
76
|
const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
|
|
105
|
-
const payload_hashes =
|
|
106
|
-
const payload_schemas =
|
|
77
|
+
const payload_hashes = assertEx(await this.getPayloadHashes(), "Missing payload_hashes");
|
|
78
|
+
const payload_schemas = assertEx(this._payload_schemas, "Missing payload_schemas");
|
|
107
79
|
const result = {
|
|
108
|
-
addresses:
|
|
80
|
+
addresses: assertEx(addresses, "Missing addresses"),
|
|
109
81
|
payload_hashes,
|
|
110
82
|
payload_schemas,
|
|
111
83
|
previous_hashes,
|
|
112
|
-
schema:
|
|
84
|
+
schema: BoundWitnessSchema
|
|
113
85
|
};
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
86
|
+
assertEx(((_a = result.payload_hashes) == null ? void 0 : _a.length) === ((_b = result.payload_schemas) == null ? void 0 : _b.length), "Payload hash/schema mismatch");
|
|
87
|
+
assertEx(!result.payload_hashes.some((hash) => !hash), () => "nulls found in hashes");
|
|
88
|
+
assertEx(!result.payload_schemas.some((schema) => !schema), "nulls found in schemas");
|
|
117
89
|
if (this.config.timestamp ?? true) {
|
|
118
90
|
result.timestamp = this._timestamp;
|
|
119
91
|
}
|
|
@@ -123,25 +95,26 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
123
95
|
return result;
|
|
124
96
|
}
|
|
125
97
|
hashes(hashes, schema) {
|
|
126
|
-
|
|
98
|
+
assertEx(this.payloads.length === 0, "Can not set hashes when payloads already set");
|
|
127
99
|
this._payloadHashes = hashes;
|
|
128
100
|
this._payloadSchemas = schema;
|
|
129
101
|
return this;
|
|
130
102
|
}
|
|
131
103
|
payload(payload) {
|
|
132
|
-
const unwrappedPayload =
|
|
133
|
-
|
|
104
|
+
const unwrappedPayload = PayloadWrapper.unwrap(payload);
|
|
105
|
+
assertEx(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
|
|
134
106
|
if (unwrappedPayload) {
|
|
135
|
-
this._payloads.push(
|
|
107
|
+
this._payloads.push(assertEx(sortFields(unwrappedPayload)));
|
|
136
108
|
}
|
|
137
109
|
return this;
|
|
138
110
|
}
|
|
139
111
|
payloads(payloads) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
112
|
+
if (payloads)
|
|
113
|
+
for (const payload of payloads) {
|
|
114
|
+
if (payload !== null) {
|
|
115
|
+
this.payload(payload);
|
|
116
|
+
}
|
|
143
117
|
}
|
|
144
|
-
});
|
|
145
118
|
return this;
|
|
146
119
|
}
|
|
147
120
|
sourceQuery(hash) {
|
|
@@ -159,12 +132,12 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
159
132
|
return this;
|
|
160
133
|
}
|
|
161
134
|
async signatures(_hash, previousHashes) {
|
|
162
|
-
const hash =
|
|
163
|
-
const previousHashesBytes = previousHashes.map((ph) => ph ?
|
|
164
|
-
return await Promise.all(this._accounts.map(async (account, index) =>
|
|
135
|
+
const hash = toArrayBuffer(_hash);
|
|
136
|
+
const previousHashesBytes = previousHashes.map((ph) => ph ? toUint8Array(ph) : void 0);
|
|
137
|
+
return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))));
|
|
165
138
|
}
|
|
166
139
|
async getPayloadHashes() {
|
|
167
|
-
return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) =>
|
|
140
|
+
return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload)));
|
|
168
141
|
}
|
|
169
142
|
inlinePayloads() {
|
|
170
143
|
console.log("BoundWitnessBuilder: Using inlinePayloads will soon be disallowed");
|
|
@@ -182,39 +155,39 @@ ${JSON.stringify(payload, null, 2)}`;
|
|
|
182
155
|
};
|
|
183
156
|
|
|
184
157
|
// src/Query/QueryBoundWitnessBuilder.ts
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
158
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
159
|
+
import { QueryBoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
160
|
+
import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
|
|
188
161
|
var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
189
162
|
_query;
|
|
190
163
|
async hashableFields() {
|
|
191
164
|
var _a;
|
|
192
165
|
return {
|
|
193
166
|
...await super.hashableFields(),
|
|
194
|
-
query: (
|
|
195
|
-
schema:
|
|
167
|
+
query: assertEx2(await ((_a = this._query) == null ? void 0 : _a.hashAsync()), "No Query Specified"),
|
|
168
|
+
schema: QueryBoundWitnessSchema
|
|
196
169
|
};
|
|
197
170
|
}
|
|
198
171
|
query(query) {
|
|
199
|
-
this._query =
|
|
172
|
+
this._query = PayloadWrapper2.wrap(query);
|
|
200
173
|
this.payload(this._query.payload());
|
|
201
174
|
return this;
|
|
202
175
|
}
|
|
203
176
|
};
|
|
204
177
|
|
|
205
178
|
// src/Query/QueryBoundWitnessWrapper.ts
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends
|
|
179
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
180
|
+
import { compact } from "@xylabs/lodash";
|
|
181
|
+
import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
|
|
182
|
+
import { PayloadHasher as PayloadHasher2 } from "@xyo-network/hash";
|
|
183
|
+
import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
|
|
184
|
+
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
|
|
212
185
|
_payloadsWithoutQuery;
|
|
213
186
|
_query;
|
|
214
187
|
_resultSet;
|
|
215
188
|
isQueryBoundWitnessWrapper = true;
|
|
216
189
|
static parseQuery(obj, payloads) {
|
|
217
|
-
(
|
|
190
|
+
assertEx3(!Array.isArray(obj), "Array can not be converted to QueryBoundWitnessWrapper");
|
|
218
191
|
switch (typeof obj) {
|
|
219
192
|
case "object": {
|
|
220
193
|
const castWrapper = obj;
|
|
@@ -222,27 +195,26 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_bo
|
|
|
222
195
|
return wrapper;
|
|
223
196
|
}
|
|
224
197
|
}
|
|
225
|
-
throw Error(`Unable to parse [${typeof obj}]`);
|
|
198
|
+
throw new Error(`Unable to parse [${typeof obj}]`);
|
|
226
199
|
}
|
|
227
200
|
async getQuery() {
|
|
228
201
|
const payloadMap = await this.allPayloadMap();
|
|
229
202
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
230
|
-
return (
|
|
203
|
+
return assertEx3(this._query, `Missing Query [${this.boundwitness}]`);
|
|
231
204
|
}
|
|
232
205
|
async getWrappedPayloads() {
|
|
233
|
-
this._payloadsWithoutQuery = this._payloadsWithoutQuery ??
|
|
234
|
-
(await
|
|
206
|
+
this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact(
|
|
207
|
+
(await PayloadHasher2.filterExclude(
|
|
235
208
|
(await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
|
|
236
209
|
this.payload().query
|
|
237
|
-
)).map((payload) =>
|
|
210
|
+
)).map((payload) => PayloadWrapper3.wrap(payload))
|
|
238
211
|
);
|
|
239
212
|
return this._payloadsWithoutQuery;
|
|
240
213
|
}
|
|
241
214
|
};
|
|
242
|
-
|
|
243
|
-
0 && (module.exports = {
|
|
215
|
+
export {
|
|
244
216
|
BoundWitnessBuilder,
|
|
245
217
|
QueryBoundWitnessBuilder,
|
|
246
218
|
QueryBoundWitnessWrapper
|
|
247
|
-
}
|
|
219
|
+
};
|
|
248
220
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["import_assert","import_boundwitness_model","import_assert","import_boundwitness_wrapper","import_hash","import_payload_wrapper"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n for (const error of errors ?? []) {\n if (error !== null) {\n this.error(error)\n }\n }\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadWrapper","assertEx","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadHasher","PayloadWrapper"]}
|
package/package.json
CHANGED
|
@@ -16,25 +16,24 @@
|
|
|
16
16
|
"@xylabs/hex": "^2.13.20",
|
|
17
17
|
"@xylabs/lodash": "^2.13.20",
|
|
18
18
|
"@xylabs/logger": "^2.13.20",
|
|
19
|
-
"@xyo-network/account-model": "~2.84.
|
|
20
|
-
"@xyo-network/boundwitness-model": "~2.84.
|
|
21
|
-
"@xyo-network/boundwitness-validator": "~2.84.
|
|
22
|
-
"@xyo-network/boundwitness-wrapper": "~2.84.
|
|
23
|
-
"@xyo-network/hash": "~2.84.
|
|
24
|
-
"@xyo-network/payload": "~2.84.
|
|
25
|
-
"@xyo-network/payload-model": "~2.84.
|
|
26
|
-
"@xyo-network/payload-wrapper": "~2.84.
|
|
19
|
+
"@xyo-network/account-model": "~2.84.8",
|
|
20
|
+
"@xyo-network/boundwitness-model": "~2.84.8",
|
|
21
|
+
"@xyo-network/boundwitness-validator": "~2.84.8",
|
|
22
|
+
"@xyo-network/boundwitness-wrapper": "~2.84.8",
|
|
23
|
+
"@xyo-network/hash": "~2.84.8",
|
|
24
|
+
"@xyo-network/payload": "~2.84.8",
|
|
25
|
+
"@xyo-network/payload-model": "~2.84.8",
|
|
26
|
+
"@xyo-network/payload-wrapper": "~2.84.8",
|
|
27
27
|
"async-mutex": "^0.4.0"
|
|
28
28
|
},
|
|
29
29
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@xylabs/ts-scripts-yarn3": "^3.2.
|
|
32
|
-
"@xylabs/tsconfig": "^3.2.
|
|
33
|
-
"@xyo-network/account": "~2.84.
|
|
34
|
-
"@xyo-network/object": "~2.84.
|
|
31
|
+
"@xylabs/ts-scripts-yarn3": "^3.2.24",
|
|
32
|
+
"@xylabs/tsconfig": "^3.2.24",
|
|
33
|
+
"@xyo-network/account": "~2.84.8",
|
|
34
|
+
"@xyo-network/object": "~2.84.8",
|
|
35
35
|
"typescript": "^5.3.3"
|
|
36
36
|
},
|
|
37
|
-
"docs": "dist/docs.json",
|
|
38
37
|
"exports": {
|
|
39
38
|
".": {
|
|
40
39
|
"browser": {
|
|
@@ -49,19 +48,19 @@
|
|
|
49
48
|
},
|
|
50
49
|
"node": {
|
|
51
50
|
"require": {
|
|
52
|
-
"types": "./dist/node/index.d.
|
|
53
|
-
"default": "./dist/node/index.
|
|
51
|
+
"types": "./dist/node/index.d.cts",
|
|
52
|
+
"default": "./dist/node/index.cjs"
|
|
54
53
|
},
|
|
55
54
|
"import": {
|
|
56
55
|
"types": "./dist/node/index.d.mts",
|
|
57
|
-
"default": "./dist/node/index.
|
|
56
|
+
"default": "./dist/node/index.js"
|
|
58
57
|
}
|
|
59
58
|
}
|
|
60
59
|
},
|
|
61
60
|
"./package.json": "./package.json"
|
|
62
61
|
},
|
|
63
|
-
"main": "dist/node/index.
|
|
64
|
-
"module": "dist/node/index.
|
|
62
|
+
"main": "dist/node/index.cjs",
|
|
63
|
+
"module": "dist/node/index.js",
|
|
65
64
|
"homepage": "https://xyo.network",
|
|
66
65
|
"license": "LGPL-3.0-only",
|
|
67
66
|
"publishConfig": {
|
|
@@ -73,5 +72,6 @@
|
|
|
73
72
|
},
|
|
74
73
|
"sideEffects": false,
|
|
75
74
|
"types": "dist/node/index.d.ts",
|
|
76
|
-
"version": "2.84.
|
|
75
|
+
"version": "2.84.8",
|
|
76
|
+
"type": "module"
|
|
77
77
|
}
|
package/src/Builder.ts
CHANGED
|
@@ -87,11 +87,11 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: st
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
errors(errors?: (ModuleError | null)[]) {
|
|
90
|
-
|
|
90
|
+
for (const error of errors ?? []) {
|
|
91
91
|
if (error !== null) {
|
|
92
92
|
this.error(error)
|
|
93
93
|
}
|
|
94
|
-
}
|
|
94
|
+
}
|
|
95
95
|
return this
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -112,9 +112,9 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: st
|
|
|
112
112
|
|
|
113
113
|
assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')
|
|
114
114
|
|
|
115
|
-
assertEx(!result.payload_hashes.
|
|
115
|
+
assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')
|
|
116
116
|
|
|
117
|
-
assertEx(!result.payload_schemas.
|
|
117
|
+
assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')
|
|
118
118
|
|
|
119
119
|
if (this.config.timestamp ?? true) {
|
|
120
120
|
result.timestamp = this._timestamp
|
|
@@ -144,11 +144,12 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: st
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
payloads(payloads?: (TPayload | null)[]) {
|
|
147
|
-
payloads
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
if (payloads)
|
|
148
|
+
for (const payload of payloads) {
|
|
149
|
+
if (payload !== null) {
|
|
150
|
+
this.payload(payload)
|
|
151
|
+
}
|
|
150
152
|
}
|
|
151
|
-
})
|
|
152
153
|
return this
|
|
153
154
|
}
|
|
154
155
|
|
|
@@ -32,14 +32,14 @@ export class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWi
|
|
|
32
32
|
const resultSet = PayloadWrapper.wrap<PayloadSetPayload>((await wrapper.payloadMap())[resultSetHash] as PayloadSetPayload)
|
|
33
33
|
const required = resultSet?.payload().required
|
|
34
34
|
if (required) {
|
|
35
|
-
|
|
35
|
+
for (const [key, value] of Object.entries(required)) {
|
|
36
36
|
const found = wrapper.payloadSchemas.reduce((count, schema) => {
|
|
37
37
|
return count + (schema === key ? 1 : 0)
|
|
38
38
|
}, 0)
|
|
39
39
|
if (found !== value) {
|
|
40
40
|
errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`))
|
|
41
41
|
}
|
|
42
|
-
}
|
|
42
|
+
}
|
|
43
43
|
}
|
|
44
44
|
} catch (ex) {
|
|
45
45
|
handleError(ex, (error) => {
|