@xyo-network/boundwitness-builder 2.75.17 → 2.76.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/Builder.d.cts +2 -0
- package/dist/browser/Builder.d.cts.map +1 -1
- package/dist/browser/Builder.d.mts +2 -0
- package/dist/browser/Builder.d.mts.map +1 -1
- package/dist/browser/Builder.d.ts +2 -0
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.cts +2 -4
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.cts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.mts +2 -4
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.mts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.ts +2 -4
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.ts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.cts +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.cts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.mts +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.mts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.ts +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.ts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.cts +1 -5
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.cts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.mts +1 -5
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.mts.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.ts +1 -5
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.ts.map +1 -1
- package/dist/browser/Query/index.d.cts +0 -2
- package/dist/browser/Query/index.d.cts.map +1 -1
- package/dist/browser/Query/index.d.mts +0 -2
- package/dist/browser/Query/index.d.mts.map +1 -1
- package/dist/browser/Query/index.d.ts +0 -2
- package/dist/browser/Query/index.d.ts.map +1 -1
- package/dist/browser/index.cjs +18 -80
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +17 -79
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Builder.d.cts +2 -0
- package/dist/node/Builder.d.cts.map +1 -1
- package/dist/node/Builder.d.mts +2 -0
- package/dist/node/Builder.d.mts.map +1 -1
- package/dist/node/Builder.d.ts +2 -0
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessBuilder.d.cts +2 -4
- package/dist/node/Query/QueryBoundWitnessBuilder.d.cts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessBuilder.d.mts +2 -4
- package/dist/node/Query/QueryBoundWitnessBuilder.d.mts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessBuilder.d.ts +2 -4
- package/dist/node/Query/QueryBoundWitnessBuilder.d.ts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.cts +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.cts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.mts +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.mts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.ts +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.ts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessWrapper.d.cts +1 -5
- package/dist/node/Query/QueryBoundWitnessWrapper.d.cts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessWrapper.d.mts +1 -5
- package/dist/node/Query/QueryBoundWitnessWrapper.d.mts.map +1 -1
- package/dist/node/Query/QueryBoundWitnessWrapper.d.ts +1 -5
- package/dist/node/Query/QueryBoundWitnessWrapper.d.ts.map +1 -1
- package/dist/node/Query/index.d.cts +0 -2
- package/dist/node/Query/index.d.cts.map +1 -1
- package/dist/node/Query/index.d.mts +0 -2
- package/dist/node/Query/index.d.mts.map +1 -1
- package/dist/node/Query/index.d.ts +0 -2
- package/dist/node/Query/index.d.ts.map +1 -1
- package/dist/node/index.js +19 -84
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +17 -79
- package/dist/node/index.mjs.map +1 -1
- package/package.json +12 -12
- package/src/Builder.ts +10 -0
- package/src/Query/QueryBoundWitnessBuilder.ts +2 -9
- package/src/Query/QueryBoundWitnessValidator.ts +1 -1
- package/src/Query/QueryBoundWitnessWrapper.ts +1 -16
- package/src/Query/index.ts +0 -2
- package/dist/browser/Query/QueryBoundWitness.d.cts +0 -17
- package/dist/browser/Query/QueryBoundWitness.d.cts.map +0 -1
- package/dist/browser/Query/QueryBoundWitness.d.mts +0 -17
- package/dist/browser/Query/QueryBoundWitness.d.mts.map +0 -1
- package/dist/browser/Query/QueryBoundWitness.d.ts +0 -17
- package/dist/browser/Query/QueryBoundWitness.d.ts.map +0 -1
- package/dist/docs.json +0 -18622
- package/dist/node/Query/QueryBoundWitness.d.cts +0 -17
- package/dist/node/Query/QueryBoundWitness.d.cts.map +0 -1
- package/dist/node/Query/QueryBoundWitness.d.mts +0 -17
- package/dist/node/Query/QueryBoundWitness.d.mts.map +0 -1
- package/dist/node/Query/QueryBoundWitness.d.ts +0 -17
- package/dist/node/Query/QueryBoundWitness.d.ts.map +0 -1
- package/src/Query/QueryBoundWitness.ts +0 -13
package/dist/node/index.js
CHANGED
|
@@ -22,10 +22,7 @@ var src_exports = {};
|
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
BoundWitnessBuilder: () => BoundWitnessBuilder,
|
|
24
24
|
QueryBoundWitnessBuilder: () => QueryBoundWitnessBuilder,
|
|
25
|
-
|
|
26
|
-
QueryBoundWitnessValidator: () => QueryBoundWitnessValidator,
|
|
27
|
-
QueryBoundWitnessWrapper: () => QueryBoundWitnessWrapper,
|
|
28
|
-
isQueryBoundWitness: () => isQueryBoundWitness
|
|
25
|
+
QueryBoundWitnessWrapper: () => QueryBoundWitnessWrapper
|
|
29
26
|
});
|
|
30
27
|
module.exports = __toCommonJS(src_exports);
|
|
31
28
|
|
|
@@ -49,6 +46,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
49
46
|
_payloadHashes;
|
|
50
47
|
_payloadSchemas;
|
|
51
48
|
_payloads = [];
|
|
49
|
+
_sourceQuery;
|
|
52
50
|
_timestamp = Date.now();
|
|
53
51
|
get _payload_schemas() {
|
|
54
52
|
return this._payloadSchemas ?? this._payloads.map((payload) => {
|
|
@@ -113,6 +111,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
113
111
|
if (this.config.timestamp ?? true) {
|
|
114
112
|
result.timestamp = this._timestamp;
|
|
115
113
|
}
|
|
114
|
+
if (this._sourceQuery) {
|
|
115
|
+
result.sourceQuery = this._sourceQuery;
|
|
116
|
+
}
|
|
116
117
|
return result;
|
|
117
118
|
}
|
|
118
119
|
hashes(hashes, schema) {
|
|
@@ -137,6 +138,10 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
137
138
|
});
|
|
138
139
|
return this;
|
|
139
140
|
}
|
|
141
|
+
sourceQuery(hash) {
|
|
142
|
+
this._sourceQuery = hash;
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
140
145
|
witness(account) {
|
|
141
146
|
var _a;
|
|
142
147
|
(_a = this._accounts) == null ? void 0 : _a.push(account);
|
|
@@ -170,23 +175,18 @@ ${JSON.stringify(payload, null, 2)}`;
|
|
|
170
175
|
}
|
|
171
176
|
};
|
|
172
177
|
|
|
173
|
-
// src/Query/QueryBoundWitness.ts
|
|
174
|
-
var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
|
|
175
|
-
var QueryBoundWitnessSchema = import_boundwitness_model2.BoundWitnessSchema;
|
|
176
|
-
var isQueryBoundWitness = (x) => (0, import_boundwitness_model2.isBoundWitness)(x) && (x == null ? void 0 : x.query) !== void 0;
|
|
177
|
-
|
|
178
178
|
// src/Query/QueryBoundWitnessBuilder.ts
|
|
179
179
|
var import_assert2 = require("@xylabs/assert");
|
|
180
|
+
var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
|
|
180
181
|
var import_payload_wrapper = require("@xyo-network/payload-wrapper");
|
|
181
182
|
var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
182
183
|
_query;
|
|
183
|
-
_resultSet;
|
|
184
184
|
async hashableFields() {
|
|
185
185
|
var _a;
|
|
186
186
|
return {
|
|
187
187
|
...await super.hashableFields(),
|
|
188
188
|
query: (0, import_assert2.assertEx)(await ((_a = this._query) == null ? void 0 : _a.hashAsync()), "No Query Specified"),
|
|
189
|
-
schema: QueryBoundWitnessSchema
|
|
189
|
+
schema: import_boundwitness_model2.QueryBoundWitnessSchema
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
192
|
query(query) {
|
|
@@ -194,72 +194,21 @@ var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
|
194
194
|
this.payload(this._query.payload());
|
|
195
195
|
return this;
|
|
196
196
|
}
|
|
197
|
-
resultSet(payloadSet) {
|
|
198
|
-
this._resultSet = import_payload_wrapper.PayloadWrapper.wrap(payloadSet);
|
|
199
|
-
this.payload(this._resultSet.payload());
|
|
200
|
-
return this;
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
// src/Query/QueryBoundWitnessValidator.ts
|
|
205
|
-
var import_assert3 = require("@xylabs/assert");
|
|
206
|
-
var import_boundwitness_validator = require("@xyo-network/boundwitness-validator");
|
|
207
|
-
var import_boundwitness_wrapper2 = require("@xyo-network/boundwitness-wrapper");
|
|
208
|
-
var import_error = require("@xyo-network/error");
|
|
209
|
-
var import_payload_wrapper2 = require("@xyo-network/payload-wrapper");
|
|
210
|
-
var QueryBoundWitnessValidator = class _QueryBoundWitnessValidator extends import_boundwitness_validator.BoundWitnessValidator {
|
|
211
|
-
_query;
|
|
212
|
-
get expectedSchema() {
|
|
213
|
-
return QueryBoundWitnessSchema;
|
|
214
|
-
}
|
|
215
|
-
static isQueryBoundWitnessValidator(obj) {
|
|
216
|
-
return (obj == null ? void 0 : obj.constructor) === _QueryBoundWitnessValidator;
|
|
217
|
-
}
|
|
218
|
-
async validate() {
|
|
219
|
-
return [
|
|
220
|
-
...await super.validate()
|
|
221
|
-
// ...this.validateResultSet()
|
|
222
|
-
];
|
|
223
|
-
}
|
|
224
|
-
async validateResultSet() {
|
|
225
|
-
const errors = [];
|
|
226
|
-
try {
|
|
227
|
-
const resultSetHash = (0, import_assert3.assertEx)(this.obj.resultSet, "Missing ResultSet");
|
|
228
|
-
const wrapper = import_boundwitness_wrapper2.BoundWitnessWrapper.parse(this.obj);
|
|
229
|
-
const resultSet = import_payload_wrapper2.PayloadWrapper.wrap((await wrapper.payloadMap())[resultSetHash]);
|
|
230
|
-
const required = resultSet == null ? void 0 : resultSet.payload().required;
|
|
231
|
-
if (required) {
|
|
232
|
-
Object.entries(required).forEach(([key, value]) => {
|
|
233
|
-
const found = wrapper.payloadSchemas.reduce((count, schema) => {
|
|
234
|
-
return count + (schema === key ? 1 : 0);
|
|
235
|
-
}, 0);
|
|
236
|
-
if (found !== value) {
|
|
237
|
-
errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`));
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
} catch (ex) {
|
|
242
|
-
(0, import_error.handleError)(ex, (error) => {
|
|
243
|
-
errors.push(error);
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
return errors;
|
|
247
|
-
}
|
|
248
197
|
};
|
|
249
198
|
|
|
250
199
|
// src/Query/QueryBoundWitnessWrapper.ts
|
|
251
|
-
var
|
|
200
|
+
var import_assert3 = require("@xylabs/assert");
|
|
252
201
|
var import_lodash = require("@xylabs/lodash");
|
|
253
|
-
var
|
|
202
|
+
var import_boundwitness_wrapper2 = require("@xyo-network/boundwitness-wrapper");
|
|
254
203
|
var import_core2 = require("@xyo-network/core");
|
|
255
|
-
var
|
|
256
|
-
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends
|
|
204
|
+
var import_payload_wrapper2 = require("@xyo-network/payload-wrapper");
|
|
205
|
+
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_boundwitness_wrapper2.BoundWitnessWrapper {
|
|
257
206
|
_payloadsWithoutQuery;
|
|
258
207
|
_query;
|
|
259
208
|
_resultSet;
|
|
260
209
|
isQueryBoundWitnessWrapper = true;
|
|
261
210
|
static parseQuery(obj, payloads) {
|
|
262
|
-
(0,
|
|
211
|
+
(0, import_assert3.assertEx)(!Array.isArray(obj), "Array can not be converted to QueryBoundWitnessWrapper");
|
|
263
212
|
switch (typeof obj) {
|
|
264
213
|
case "object": {
|
|
265
214
|
const castWrapper = obj;
|
|
@@ -269,28 +218,17 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_bo
|
|
|
269
218
|
}
|
|
270
219
|
throw Error(`Unable to parse [${typeof obj}]`);
|
|
271
220
|
}
|
|
272
|
-
getErrors() {
|
|
273
|
-
return new QueryBoundWitnessValidator(this.boundwitness).validate();
|
|
274
|
-
}
|
|
275
221
|
async getQuery() {
|
|
276
222
|
const payloadMap = await this.allPayloadMap();
|
|
277
223
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
278
|
-
return (0,
|
|
279
|
-
}
|
|
280
|
-
async getResultSet() {
|
|
281
|
-
const resultSetHash = this.boundwitness.resultSet;
|
|
282
|
-
const payloadMap = await this.payloadMap();
|
|
283
|
-
return (0, import_assert4.assertEx)(
|
|
284
|
-
this._resultSet = this._resultSet ?? (resultSetHash ? payloadMap[resultSetHash] : void 0),
|
|
285
|
-
`Missing resultSet [${resultSetHash}]`
|
|
286
|
-
);
|
|
224
|
+
return (0, import_assert3.assertEx)(this._query, `Missing Query [${this.boundwitness}]`);
|
|
287
225
|
}
|
|
288
226
|
async getWrappedPayloads() {
|
|
289
227
|
this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? (0, import_lodash.compact)(
|
|
290
228
|
(await import_core2.PayloadHasher.filterExclude(
|
|
291
229
|
(await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
|
|
292
230
|
this.payload().query
|
|
293
|
-
)).map((payload) =>
|
|
231
|
+
)).map((payload) => import_payload_wrapper2.PayloadWrapper.wrap(payload))
|
|
294
232
|
);
|
|
295
233
|
return this._payloadsWithoutQuery;
|
|
296
234
|
}
|
|
@@ -299,9 +237,6 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_bo
|
|
|
299
237
|
0 && (module.exports = {
|
|
300
238
|
BoundWitnessBuilder,
|
|
301
239
|
QueryBoundWitnessBuilder,
|
|
302
|
-
|
|
303
|
-
QueryBoundWitnessValidator,
|
|
304
|
-
QueryBoundWitnessWrapper,
|
|
305
|
-
isQueryBoundWitness
|
|
240
|
+
QueryBoundWitnessWrapper
|
|
306
241
|
});
|
|
307
242
|
//# 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/QueryBoundWitness.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessValidator.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\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 readonly inlinePayloads?: boolean\n readonly meta?: boolean\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 _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 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) => account.address)\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 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 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 | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\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 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 { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n","import { assertEx } from '@xylabs/assert'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\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 private _resultSet: PayloadWrapper<PayloadSetPayload> | 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 resultSet<T extends PayloadSetPayload>(payloadSet: T) {\n this._resultSet = PayloadWrapper.wrap(payloadSet)\n this.payload(this._resultSet.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { handleError } from '@xyo-network/error'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\nexport class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWitnessValidator<QueryBoundWitness> {\n private _query: PayloadWrapper<T> | undefined\n\n protected override get expectedSchema(): string {\n return QueryBoundWitnessSchema\n }\n\n static isQueryBoundWitnessValidator(obj: unknown) {\n return (obj as QueryBoundWitnessValidator)?.constructor === QueryBoundWitnessValidator\n }\n\n override async validate() {\n return [\n ...(await super.validate()),\n // ...this.validateResultSet()\n ]\n }\n\n async validateResultSet() {\n const errors: Error[] = []\n try {\n const resultSetHash = assertEx(this.obj.resultSet, 'Missing ResultSet')\n const wrapper = BoundWitnessWrapper.parse(this.obj)\n const resultSet = PayloadWrapper.wrap<PayloadSetPayload>((await wrapper.payloadMap())[resultSetHash] as PayloadSetPayload)\n const required = resultSet?.payload().required\n if (required) {\n Object.entries(required).forEach(([key, value]) => {\n const found = wrapper.payloadSchemas.reduce((count, schema) => {\n return count + (schema === key ? 1 : 0)\n }, 0)\n if (found !== value) {\n errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`))\n }\n })\n }\n } catch (ex) {\n handleError(ex, (error) => {\n errors.push(error)\n })\n }\n return errors\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { QueryBoundWitness } from './QueryBoundWitness'\nimport { QueryBoundWitnessValidator } from './QueryBoundWitnessValidator'\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 override getErrors() {\n return new QueryBoundWitnessValidator(this.boundwitness).validate()\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 async getResultSet() {\n const resultSetHash = this.boundwitness.resultSet\n const payloadMap = await this.payloadMap()\n return assertEx(\n (this._resultSet = this._resultSet ?? (resultSetHash ? (payloadMap[resultSetHash] as PayloadSetPayload | undefined) : undefined)),\n `Missing resultSet [${resultSetHash}]`,\n )\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAyB;AACzB,oBAAuB;AAEvB,gCAAiD;AACjD,kCAAoC;AACpC,kBAAgD;AAChD,qBAA+B;AAG/B,yBAAsB;AASf,IAAM,sBAAN,MAAM,qBAA+H;AAAA,EAU1I,YACW,SAAoC,EAAE,gBAAgB,MAAM,GAClD,QACnB;AAFS;AACU;AAAA,EAClB;AAAA,EAZH,OAAwB,cAAc,IAAI,yBAAM;AAAA,EACxC,YAA+B,CAAC;AAAA,EAChC;AAAA,EACA,UAAyB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAwB,CAAC;AAAA,EACzB,aAAa,KAAK,IAAI;AAAA,EAO9B,IAAY,mBAA6B;AACvC,WACE,KAAK,mBACL,KAAK,UAAU,IAAI,CAAC,YAAY;AAC9B,iBAAO,wBAAS,QAAQ,QAAQ,MAAM,KAAK,qBAAqB,OAAO,CAAC;AAAA,IAC1E,CAAC;AAAA,EAEL;AAAA,EAEA,MAAM,MAAM,OAAO,OAA4D;AAC7E,WAAO,MAAM,qBAAoB,YAAY,aAAa,YAAY;AA3C1E;AA4CM,YAAM,iBAAiB,MAAM,KAAK,eAAe;AACjD,YAAM,QAAQ,MAAM,gDAAoB,UAAU,cAAc;AAGhE,YAAM,iBAAiB,KAAK,UAAU,IAAI,CAAC,YAAY,QAAQ,YAAY;AAE3E,YAAM,MAAqB;AAAA,QACzB,GAAG;AAAA,QACH,aAAa,MAAM,KAAK,WAAW,OAAO,cAAc;AAAA,MAC1D;AACA,UAAI,UAAQ,UAAK,WAAL,mBAAa,OAAM;AAE7B,cAAM,aAAa;AACnB,mBAAW,UAAU;AACrB,mBAAW,QAAQ;AACnB,mBAAW,aAAa,KAAK;AAAA,MAC/B;AACA,UAAI,KAAK,OAAO,gBAAgB;AAE9B,cAAM,SAAS;AAEf,eAAO,YAAY,KAAK,eAAe;AAAA,MACzC;AACA,aAAO,CAAC,KAAK,KAAK,WAAW,KAAK,OAAO;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAuB;AAC3B,UAAM,mBAAmB,8BAAe,OAAO,OAAO;AACtD,gCAAS,KAAK,iBAAiB,QAAW,4CAA4C;AACtF,QAAI,kBAAkB;AACpB,WAAK,QAAQ,SAAK,4BAAS,wBAAW,gBAAgB,CAAC,CAAC;AAAA,IAC1D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAiC;AACtC,qCAAQ,QAAQ,CAAC,UAAU;AACzB,UAAI,UAAU,MAAM;AAClB,aAAK,MAAM,KAAK;AAAA,MAClB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAyC;AAzFjD;AA0FI,UAAM,YAAY,KAAK,UAAU,IAAI,CAAC,YAAY,QAAQ,OAAO;AACjE,UAAM,kBAAkB,KAAK,UAAU,IAAI,CAAC,YAAY,QAAQ,gBAAgB,IAAI;AACpF,UAAM,qBAAiB,wBAAS,MAAM,KAAK,iBAAiB,GAAG,wBAAwB;AACvF,UAAM,sBAAkB,wBAAS,KAAK,kBAAkB,yBAAyB;AACjF,UAAM,SAAwB;AAAA,MAC5B,eAAW,wBAAS,WAAW,mBAAmB;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAEA,kCAAS,YAAO,mBAAP,mBAAuB,cAAW,YAAO,oBAAP,mBAAwB,SAAQ,8BAA8B;AAEzG,gCAAS,CAAC,OAAO,eAAe,OAAO,CAAC,SAAS,SAAS,WAAW,CAAC,MAAM,KAAK,GAAG,uBAAuB;AAE3G,gCAAS,CAAC,OAAO,gBAAgB,OAAO,CAAC,SAAS,WAAW,WAAW,CAAC,QAAQ,KAAK,GAAG,wBAAwB;AAEjH,QAAI,KAAK,OAAO,aAAa,MAAM;AACjC,aAAO,YAAY,KAAK;AAAA,IAC1B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAkB,QAAkB;AACzC,gCAAS,KAAK,SAAS,WAAW,GAAG,8CAA8C;AACnF,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAAoB;AAC1B,UAAM,mBAAmB,8BAAe,OAAiB,OAAO;AAChE,gCAAS,KAAK,mBAAmB,QAAW,8CAA8C;AAC1F,QAAI,kBAAkB;AACpB,WAAK,UAAU,SAAK,4BAAS,wBAAqB,gBAAgB,CAAC,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAgC;AACvC,yCAAU,QAAQ,CAAC,YAAY;AAC7B,UAAI,YAAY,MAAM;AACpB,aAAK,QAAQ,OAAO;AAAA,MACtB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAA0B;AA5IpC;AA6II,eAAK,cAAL,mBAAgB,KAAK;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,UAA6B;AAjJzC;AAkJI,eAAK,cAAL,mBAAgB,KAAK,GAAG;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,WAAW,OAAe,gBAA+C;AACvF,UAAM,OAAO,qBAAO,KAAK,OAAO,KAAK;AACrC,WAAO,MAAM,QAAQ;AAAA,MACnB,KAAK,UAAU,IAAI,OAAO,SAAS,UAAU,qBAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,eAAe,KAAK,CAAC,CAAC,EAAE,SAAS,KAAK,CAAC;AAAA,IAC3H;AAAA,EACF;AAAA,EAEA,MAAc,mBAAsC;AAClD,WAAO,KAAK,kBAAmB,MAAM,QAAQ,IAAI,KAAK,UAAU,IAAI,CAAC,YAAY,0BAAc,UAAU,OAAO,CAAC,CAAC;AAAA,EACpH;AAAA,EAEQ,iBAAiB;AACvB,WAAO,KAAK,UAAU,IAAc,CAAC,SAAS,UAAU;AACtD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,KAAK,iBAAiB,KAAK;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,qBAAqB,SAAkB;AAC7C,WAAO;AAAA,EAA4B,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,EACrE;AACF;;;AC7KA,IAAAA,6BAAiE;AAI1D,IAAM,0BAAmD;AAQzD,IAAM,sBAAsB,CAAC,UAA+C,2CAAe,CAAC,MAAM,uBAAyB,WAAU;;;ACZ5I,IAAAC,iBAAyB;AAEzB,6BAA+B;AAKxB,IAAM,2BAAN,cAGG,oBAAmC;AAAA,EACnC;AAAA,EACA;AAAA,EAER,MAAe,iBAAyC;AAd1D;AAeI,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,eAAe;AAAA,MAC/B,WAAO,yBAAS,QAAM,UAAK,WAAL,mBAAa,cAAa,oBAAoB;AAAA,MACpE,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAwB,OAAU;AAChC,SAAK,SAAS,sCAAe,KAAK,KAAK;AACvC,SAAK,QAAQ,KAAK,OAAO,QAAQ,CAAC;AAClC,WAAO;AAAA,EACT;AAAA,EAEA,UAAuC,YAAe;AACpD,SAAK,aAAa,sCAAe,KAAK,UAAU;AAChD,SAAK,QAAQ,KAAK,WAAW,QAAQ,CAAC;AACtC,WAAO;AAAA,EACT;AACF;;;ACjCA,IAAAC,iBAAyB;AACzB,oCAAsC;AACtC,IAAAC,+BAAoC;AACpC,mBAA4B;AAE5B,IAAAC,0BAA+B;AAGxB,IAAM,6BAAN,MAAM,oCAA4D,oDAAyC;AAAA,EACxG;AAAA,EAER,IAAuB,iBAAyB;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,6BAA6B,KAAc;AAChD,YAAQ,2BAAoC,iBAAgB;AAAA,EAC9D;AAAA,EAEA,MAAe,WAAW;AACxB,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,SAAS;AAAA;AAAA,IAE3B;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB;AACxB,UAAM,SAAkB,CAAC;AACzB,QAAI;AACF,YAAM,oBAAgB,yBAAS,KAAK,IAAI,WAAW,mBAAmB;AACtE,YAAM,UAAU,iDAAoB,MAAM,KAAK,GAAG;AAClD,YAAM,YAAY,uCAAe,MAAyB,MAAM,QAAQ,WAAW,GAAG,aAAa,CAAsB;AACzH,YAAM,WAAW,uCAAW,UAAU;AACtC,UAAI,UAAU;AACZ,eAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACjD,gBAAM,QAAQ,QAAQ,eAAe,OAAO,CAAC,OAAO,WAAW;AAC7D,mBAAO,SAAS,WAAW,MAAM,IAAI;AAAA,UACvC,GAAG,CAAC;AACJ,cAAI,UAAU,OAAO;AACnB,mBAAO,KAAK,MAAM,sCAAsC,GAAG,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;AAAA,UACnF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,IAAI;AACX,oCAAY,IAAI,CAAC,UAAU;AACzB,eAAO,KAAK,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AACF;;;AClDA,IAAAC,iBAAyB;AACzB,oBAAwB;AACxB,IAAAC,+BAAoC;AACpC,IAAAC,eAA8B;AAE9B,IAAAC,0BAA+B;AAKxB,IAAM,2BAAN,MAAM,kCAA0D,iDAAuC;AAAA,EACpG;AAAA,EACA;AAAA,EACA;AAAA,EAEA,6BAA6B;AAAA,EAErC,OAAO,WAAoC,KAAc,UAAmD;AAC1G,iCAAS,CAAC,MAAM,QAAQ,GAAG,GAAG,wDAAwD;AACtF,YAAQ,OAAO,KAAK;AAAA,MAClB,KAAK,UAAU;AACb,cAAM,cAAc;AACpB,cAAM,WAAU,2CAAa,8BAA6B,cAAc,IAAI,0BAA4B,KAA0B,QAAQ;AAI1I,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,MAAM,oBAAoB,OAAO,GAAG,GAAG;AAAA,EAC/C;AAAA,EAES,YAAY;AACnB,WAAO,IAAI,2BAA2B,KAAK,YAAY,EAAE,SAAS;AAAA,EACpE;AAAA,EAEA,MAAM,WAAuB;AAC3B,UAAM,aAAa,MAAM,KAAK,cAAc;AAC5C,SAAK,SAAS,KAAK,UAAW,WAAW,KAAK,aAAa,KAAK;AAChE,eAAO,yBAAS,KAAK,QAAQ,kBAAkB,KAAK,YAAY,GAAG;AAAA,EACrE;AAAA,EAEA,MAAM,eAAe;AACnB,UAAM,gBAAgB,KAAK,aAAa;AACxC,UAAM,aAAa,MAAM,KAAK,WAAW;AACzC,eAAO;AAAA,MACJ,KAAK,aAAa,KAAK,eAAe,gBAAiB,WAAW,aAAa,IAAsC;AAAA,MACtH,sBAAsB,aAAa;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAe,qBAAyD;AACtE,SAAK,wBACH,KAAK,6BACL;AAAA,OAEI,MAAM,2BAAc;AAAA,SACjB,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,QAAQ,QAAQ,CAAC;AAAA,QACrE,KAAK,QAAQ,EAAE;AAAA,MACjB,GACA,IAAI,CAAC,YAAY,uCAAe,KAAK,OAAO,CAAC;AAAA,IACjD;AACF,WAAO,KAAK;AAAA,EACd;AACF;","names":["import_boundwitness_model","import_assert","import_assert","import_boundwitness_wrapper","import_payload_wrapper","import_assert","import_boundwitness_wrapper","import_core","import_payload_wrapper"]}
|
|
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 { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\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 readonly inlinePayloads?: boolean\n readonly meta?: boolean\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 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) => account.address)\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 | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\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 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/core'\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_core","import_payload_wrapper"]}
|
package/dist/node/index.mjs
CHANGED
|
@@ -18,6 +18,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
18
18
|
_payloadHashes;
|
|
19
19
|
_payloadSchemas;
|
|
20
20
|
_payloads = [];
|
|
21
|
+
_sourceQuery;
|
|
21
22
|
_timestamp = Date.now();
|
|
22
23
|
get _payload_schemas() {
|
|
23
24
|
return this._payloadSchemas ?? this._payloads.map((payload) => {
|
|
@@ -82,6 +83,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
82
83
|
if (this.config.timestamp ?? true) {
|
|
83
84
|
result.timestamp = this._timestamp;
|
|
84
85
|
}
|
|
86
|
+
if (this._sourceQuery) {
|
|
87
|
+
result.sourceQuery = this._sourceQuery;
|
|
88
|
+
}
|
|
85
89
|
return result;
|
|
86
90
|
}
|
|
87
91
|
hashes(hashes, schema) {
|
|
@@ -106,6 +110,10 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
106
110
|
});
|
|
107
111
|
return this;
|
|
108
112
|
}
|
|
113
|
+
sourceQuery(hash) {
|
|
114
|
+
this._sourceQuery = hash;
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
109
117
|
witness(account) {
|
|
110
118
|
var _a;
|
|
111
119
|
(_a = this._accounts) == null ? void 0 : _a.push(account);
|
|
@@ -139,17 +147,12 @@ ${JSON.stringify(payload, null, 2)}`;
|
|
|
139
147
|
}
|
|
140
148
|
};
|
|
141
149
|
|
|
142
|
-
// src/Query/QueryBoundWitness.ts
|
|
143
|
-
import { BoundWitnessSchema as BoundWitnessSchema2, isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
144
|
-
var QueryBoundWitnessSchema = BoundWitnessSchema2;
|
|
145
|
-
var isQueryBoundWitness = (x) => isBoundWitness(x) && (x == null ? void 0 : x.query) !== void 0;
|
|
146
|
-
|
|
147
150
|
// src/Query/QueryBoundWitnessBuilder.ts
|
|
148
151
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
152
|
+
import { QueryBoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
149
153
|
import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
|
|
150
154
|
var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
151
155
|
_query;
|
|
152
|
-
_resultSet;
|
|
153
156
|
async hashableFields() {
|
|
154
157
|
var _a;
|
|
155
158
|
return {
|
|
@@ -163,72 +166,21 @@ var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
|
163
166
|
this.payload(this._query.payload());
|
|
164
167
|
return this;
|
|
165
168
|
}
|
|
166
|
-
resultSet(payloadSet) {
|
|
167
|
-
this._resultSet = PayloadWrapper2.wrap(payloadSet);
|
|
168
|
-
this.payload(this._resultSet.payload());
|
|
169
|
-
return this;
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
// src/Query/QueryBoundWitnessValidator.ts
|
|
174
|
-
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
175
|
-
import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
|
|
176
|
-
import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
|
|
177
|
-
import { handleError } from "@xyo-network/error";
|
|
178
|
-
import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
|
|
179
|
-
var QueryBoundWitnessValidator = class _QueryBoundWitnessValidator extends BoundWitnessValidator {
|
|
180
|
-
_query;
|
|
181
|
-
get expectedSchema() {
|
|
182
|
-
return QueryBoundWitnessSchema;
|
|
183
|
-
}
|
|
184
|
-
static isQueryBoundWitnessValidator(obj) {
|
|
185
|
-
return (obj == null ? void 0 : obj.constructor) === _QueryBoundWitnessValidator;
|
|
186
|
-
}
|
|
187
|
-
async validate() {
|
|
188
|
-
return [
|
|
189
|
-
...await super.validate()
|
|
190
|
-
// ...this.validateResultSet()
|
|
191
|
-
];
|
|
192
|
-
}
|
|
193
|
-
async validateResultSet() {
|
|
194
|
-
const errors = [];
|
|
195
|
-
try {
|
|
196
|
-
const resultSetHash = assertEx3(this.obj.resultSet, "Missing ResultSet");
|
|
197
|
-
const wrapper = BoundWitnessWrapper2.parse(this.obj);
|
|
198
|
-
const resultSet = PayloadWrapper3.wrap((await wrapper.payloadMap())[resultSetHash]);
|
|
199
|
-
const required = resultSet == null ? void 0 : resultSet.payload().required;
|
|
200
|
-
if (required) {
|
|
201
|
-
Object.entries(required).forEach(([key, value]) => {
|
|
202
|
-
const found = wrapper.payloadSchemas.reduce((count, schema) => {
|
|
203
|
-
return count + (schema === key ? 1 : 0);
|
|
204
|
-
}, 0);
|
|
205
|
-
if (found !== value) {
|
|
206
|
-
errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`));
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
} catch (ex) {
|
|
211
|
-
handleError(ex, (error) => {
|
|
212
|
-
errors.push(error);
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
return errors;
|
|
216
|
-
}
|
|
217
169
|
};
|
|
218
170
|
|
|
219
171
|
// src/Query/QueryBoundWitnessWrapper.ts
|
|
220
|
-
import { assertEx as
|
|
172
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
221
173
|
import { compact } from "@xylabs/lodash";
|
|
222
|
-
import { BoundWitnessWrapper as
|
|
174
|
+
import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
|
|
223
175
|
import { PayloadHasher as PayloadHasher2 } from "@xyo-network/core";
|
|
224
|
-
import { PayloadWrapper as
|
|
225
|
-
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends
|
|
176
|
+
import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
|
|
177
|
+
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
|
|
226
178
|
_payloadsWithoutQuery;
|
|
227
179
|
_query;
|
|
228
180
|
_resultSet;
|
|
229
181
|
isQueryBoundWitnessWrapper = true;
|
|
230
182
|
static parseQuery(obj, payloads) {
|
|
231
|
-
|
|
183
|
+
assertEx3(!Array.isArray(obj), "Array can not be converted to QueryBoundWitnessWrapper");
|
|
232
184
|
switch (typeof obj) {
|
|
233
185
|
case "object": {
|
|
234
186
|
const castWrapper = obj;
|
|
@@ -238,28 +190,17 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
238
190
|
}
|
|
239
191
|
throw Error(`Unable to parse [${typeof obj}]`);
|
|
240
192
|
}
|
|
241
|
-
getErrors() {
|
|
242
|
-
return new QueryBoundWitnessValidator(this.boundwitness).validate();
|
|
243
|
-
}
|
|
244
193
|
async getQuery() {
|
|
245
194
|
const payloadMap = await this.allPayloadMap();
|
|
246
195
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
247
|
-
return
|
|
248
|
-
}
|
|
249
|
-
async getResultSet() {
|
|
250
|
-
const resultSetHash = this.boundwitness.resultSet;
|
|
251
|
-
const payloadMap = await this.payloadMap();
|
|
252
|
-
return assertEx4(
|
|
253
|
-
this._resultSet = this._resultSet ?? (resultSetHash ? payloadMap[resultSetHash] : void 0),
|
|
254
|
-
`Missing resultSet [${resultSetHash}]`
|
|
255
|
-
);
|
|
196
|
+
return assertEx3(this._query, `Missing Query [${this.boundwitness}]`);
|
|
256
197
|
}
|
|
257
198
|
async getWrappedPayloads() {
|
|
258
199
|
this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact(
|
|
259
200
|
(await PayloadHasher2.filterExclude(
|
|
260
201
|
(await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
|
|
261
202
|
this.payload().query
|
|
262
|
-
)).map((payload) =>
|
|
203
|
+
)).map((payload) => PayloadWrapper3.wrap(payload))
|
|
263
204
|
);
|
|
264
205
|
return this._payloadsWithoutQuery;
|
|
265
206
|
}
|
|
@@ -267,9 +208,6 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
267
208
|
export {
|
|
268
209
|
BoundWitnessBuilder,
|
|
269
210
|
QueryBoundWitnessBuilder,
|
|
270
|
-
|
|
271
|
-
QueryBoundWitnessValidator,
|
|
272
|
-
QueryBoundWitnessWrapper,
|
|
273
|
-
isQueryBoundWitness
|
|
211
|
+
QueryBoundWitnessWrapper
|
|
274
212
|
};
|
|
275
213
|
//# sourceMappingURL=index.mjs.map
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitness.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessValidator.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\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 readonly inlinePayloads?: boolean\n readonly meta?: boolean\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 _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 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) => account.address)\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 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 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 | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\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 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 { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n","import { assertEx } from '@xylabs/assert'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\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 private _resultSet: PayloadWrapper<PayloadSetPayload> | 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 resultSet<T extends PayloadSetPayload>(payloadSet: T) {\n this._resultSet = PayloadWrapper.wrap(payloadSet)\n this.payload(this._resultSet.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { handleError } from '@xyo-network/error'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\nexport class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWitnessValidator<QueryBoundWitness> {\n private _query: PayloadWrapper<T> | undefined\n\n protected override get expectedSchema(): string {\n return QueryBoundWitnessSchema\n }\n\n static isQueryBoundWitnessValidator(obj: unknown) {\n return (obj as QueryBoundWitnessValidator)?.constructor === QueryBoundWitnessValidator\n }\n\n override async validate() {\n return [\n ...(await super.validate()),\n // ...this.validateResultSet()\n ]\n }\n\n async validateResultSet() {\n const errors: Error[] = []\n try {\n const resultSetHash = assertEx(this.obj.resultSet, 'Missing ResultSet')\n const wrapper = BoundWitnessWrapper.parse(this.obj)\n const resultSet = PayloadWrapper.wrap<PayloadSetPayload>((await wrapper.payloadMap())[resultSetHash] as PayloadSetPayload)\n const required = resultSet?.payload().required\n if (required) {\n Object.entries(required).forEach(([key, value]) => {\n const found = wrapper.payloadSchemas.reduce((count, schema) => {\n return count + (schema === key ? 1 : 0)\n }, 0)\n if (found !== value) {\n errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`))\n }\n })\n }\n } catch (ex) {\n handleError(ex, (error) => {\n errors.push(error)\n })\n }\n return errors\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { QueryBoundWitness } from './QueryBoundWitness'\nimport { QueryBoundWitnessValidator } from './QueryBoundWitnessValidator'\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 override getErrors() {\n return new QueryBoundWitnessValidator(this.boundwitness).validate()\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 async getResultSet() {\n const resultSetHash = this.boundwitness.resultSet\n const payloadMap = await this.payloadMap()\n return assertEx(\n (this._resultSet = this._resultSet ?? (resultSetHash ? (payloadMap[resultSetHash] as PayloadSetPayload | undefined) : undefined)),\n `Missing resultSet [${resultSetHash}]`,\n )\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":["BoundWitnessSchema","assertEx","PayloadWrapper","assertEx","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadHasher","PayloadWrapper","BoundWitnessWrapper","assertEx","PayloadHasher","PayloadWrapper"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\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 readonly inlinePayloads?: boolean\n readonly meta?: boolean\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 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) => account.address)\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 | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\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 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/core'\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":["assertEx","PayloadWrapper","assertEx","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadHasher","PayloadWrapper"]}
|
package/package.json
CHANGED
|
@@ -13,23 +13,23 @@
|
|
|
13
13
|
"@xylabs/assert": "^2.12.24",
|
|
14
14
|
"@xylabs/buffer": "^2.12.24",
|
|
15
15
|
"@xylabs/lodash": "^2.12.24",
|
|
16
|
-
"@xyo-network/account-model": "~2.
|
|
17
|
-
"@xyo-network/boundwitness-model": "~2.
|
|
18
|
-
"@xyo-network/boundwitness-validator": "~2.
|
|
19
|
-
"@xyo-network/boundwitness-wrapper": "~2.
|
|
20
|
-
"@xyo-network/core": "~2.
|
|
21
|
-
"@xyo-network/error": "~2.
|
|
22
|
-
"@xyo-network/payload": "~2.
|
|
23
|
-
"@xyo-network/payload-model": "~2.
|
|
24
|
-
"@xyo-network/payload-wrapper": "~2.
|
|
25
|
-
"@xyo-network/shared": "~2.
|
|
16
|
+
"@xyo-network/account-model": "~2.76.0",
|
|
17
|
+
"@xyo-network/boundwitness-model": "~2.76.0",
|
|
18
|
+
"@xyo-network/boundwitness-validator": "~2.76.0",
|
|
19
|
+
"@xyo-network/boundwitness-wrapper": "~2.76.0",
|
|
20
|
+
"@xyo-network/core": "~2.76.0",
|
|
21
|
+
"@xyo-network/error": "~2.76.0",
|
|
22
|
+
"@xyo-network/payload": "~2.76.0",
|
|
23
|
+
"@xyo-network/payload-model": "~2.76.0",
|
|
24
|
+
"@xyo-network/payload-wrapper": "~2.76.0",
|
|
25
|
+
"@xyo-network/shared": "~2.76.0",
|
|
26
26
|
"async-mutex": "^0.4.0"
|
|
27
27
|
},
|
|
28
28
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@xylabs/ts-scripts-yarn3": "^3.1.9",
|
|
31
31
|
"@xylabs/tsconfig": "^3.1.9",
|
|
32
|
-
"@xyo-network/account": "~2.
|
|
32
|
+
"@xyo-network/account": "~2.76.0",
|
|
33
33
|
"typescript": "^5.2.2"
|
|
34
34
|
},
|
|
35
35
|
"docs": "dist/docs.json",
|
|
@@ -74,5 +74,5 @@
|
|
|
74
74
|
},
|
|
75
75
|
"sideEffects": false,
|
|
76
76
|
"types": "dist/node/index.d.ts",
|
|
77
|
-
"version": "2.
|
|
77
|
+
"version": "2.76.0"
|
|
78
78
|
}
|
package/src/Builder.ts
CHANGED
|
@@ -24,6 +24,7 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: st
|
|
|
24
24
|
private _payloadHashes: string[] | undefined
|
|
25
25
|
private _payloadSchemas: string[] | undefined
|
|
26
26
|
private _payloads: TPayload[] = []
|
|
27
|
+
private _sourceQuery: string | undefined
|
|
27
28
|
private _timestamp = Date.now()
|
|
28
29
|
|
|
29
30
|
constructor(
|
|
@@ -110,6 +111,10 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: st
|
|
|
110
111
|
result.timestamp = this._timestamp
|
|
111
112
|
}
|
|
112
113
|
|
|
114
|
+
if (this._sourceQuery) {
|
|
115
|
+
result.sourceQuery = this._sourceQuery
|
|
116
|
+
}
|
|
117
|
+
|
|
113
118
|
return result
|
|
114
119
|
}
|
|
115
120
|
|
|
@@ -138,6 +143,11 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: st
|
|
|
138
143
|
return this
|
|
139
144
|
}
|
|
140
145
|
|
|
146
|
+
sourceQuery(hash?: string) {
|
|
147
|
+
this._sourceQuery = hash
|
|
148
|
+
return this
|
|
149
|
+
}
|
|
150
|
+
|
|
141
151
|
witness(account: AccountInstance) {
|
|
142
152
|
this._accounts?.push(account)
|
|
143
153
|
return this
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import {
|
|
2
|
+
import { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'
|
|
3
|
+
import { Query } from '@xyo-network/payload-model'
|
|
3
4
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
4
5
|
|
|
5
6
|
import { BoundWitnessBuilder } from '../Builder'
|
|
6
|
-
import { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'
|
|
7
7
|
|
|
8
8
|
export class QueryBoundWitnessBuilder<
|
|
9
9
|
TBoundWitness extends QueryBoundWitness = QueryBoundWitness,
|
|
10
10
|
TQuery extends Query = Query,
|
|
11
11
|
> extends BoundWitnessBuilder<TBoundWitness> {
|
|
12
12
|
private _query: PayloadWrapper<TQuery> | undefined
|
|
13
|
-
private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined
|
|
14
13
|
|
|
15
14
|
override async hashableFields(): Promise<TBoundWitness> {
|
|
16
15
|
return {
|
|
@@ -25,10 +24,4 @@ export class QueryBoundWitnessBuilder<
|
|
|
25
24
|
this.payload(this._query.payload())
|
|
26
25
|
return this
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
resultSet<T extends PayloadSetPayload>(payloadSet: T) {
|
|
30
|
-
this._resultSet = PayloadWrapper.wrap(payloadSet)
|
|
31
|
-
this.payload(this._resultSet.payload())
|
|
32
|
-
return this
|
|
33
|
-
}
|
|
34
27
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'
|
|
2
3
|
import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
|
|
3
4
|
import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
|
|
4
5
|
import { handleError } from '@xyo-network/error'
|
|
5
6
|
import { PayloadSetPayload, Query } from '@xyo-network/payload-model'
|
|
6
7
|
import { PayloadWrapper } from '@xyo-network/payload-wrapper'
|
|
7
8
|
|
|
8
|
-
import { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'
|
|
9
9
|
export class QueryBoundWitnessValidator<T extends Query = Query> extends BoundWitnessValidator<QueryBoundWitness> {
|
|
10
10
|
private _query: PayloadWrapper<T> | undefined
|
|
11
11
|
|