@xyo-network/boundwitness-builder 2.75.17 → 2.75.18
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/docs.json +6491 -10209
- 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/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/browser/index.js
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) => {
|
|
@@ -80,6 +81,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
80
81
|
if (this.config.timestamp ?? true) {
|
|
81
82
|
result.timestamp = this._timestamp;
|
|
82
83
|
}
|
|
84
|
+
if (this._sourceQuery) {
|
|
85
|
+
result.sourceQuery = this._sourceQuery;
|
|
86
|
+
}
|
|
83
87
|
return result;
|
|
84
88
|
}
|
|
85
89
|
hashes(hashes, schema) {
|
|
@@ -104,6 +108,10 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
104
108
|
});
|
|
105
109
|
return this;
|
|
106
110
|
}
|
|
111
|
+
sourceQuery(hash) {
|
|
112
|
+
this._sourceQuery = hash;
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
107
115
|
witness(account) {
|
|
108
116
|
this._accounts?.push(account);
|
|
109
117
|
return this;
|
|
@@ -135,17 +143,12 @@ ${JSON.stringify(payload, null, 2)}`;
|
|
|
135
143
|
}
|
|
136
144
|
};
|
|
137
145
|
|
|
138
|
-
// src/Query/QueryBoundWitness.ts
|
|
139
|
-
import { BoundWitnessSchema as BoundWitnessSchema2, isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
140
|
-
var QueryBoundWitnessSchema = BoundWitnessSchema2;
|
|
141
|
-
var isQueryBoundWitness = (x) => isBoundWitness(x) && x?.query !== void 0;
|
|
142
|
-
|
|
143
146
|
// src/Query/QueryBoundWitnessBuilder.ts
|
|
144
147
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
148
|
+
import { QueryBoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
145
149
|
import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
|
|
146
150
|
var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
147
151
|
_query;
|
|
148
|
-
_resultSet;
|
|
149
152
|
async hashableFields() {
|
|
150
153
|
return {
|
|
151
154
|
...await super.hashableFields(),
|
|
@@ -158,72 +161,21 @@ var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
|
158
161
|
this.payload(this._query.payload());
|
|
159
162
|
return this;
|
|
160
163
|
}
|
|
161
|
-
resultSet(payloadSet) {
|
|
162
|
-
this._resultSet = PayloadWrapper2.wrap(payloadSet);
|
|
163
|
-
this.payload(this._resultSet.payload());
|
|
164
|
-
return this;
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
// src/Query/QueryBoundWitnessValidator.ts
|
|
169
|
-
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
170
|
-
import { BoundWitnessValidator } from "@xyo-network/boundwitness-validator";
|
|
171
|
-
import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
|
|
172
|
-
import { handleError } from "@xyo-network/error";
|
|
173
|
-
import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
|
|
174
|
-
var QueryBoundWitnessValidator = class _QueryBoundWitnessValidator extends BoundWitnessValidator {
|
|
175
|
-
_query;
|
|
176
|
-
get expectedSchema() {
|
|
177
|
-
return QueryBoundWitnessSchema;
|
|
178
|
-
}
|
|
179
|
-
static isQueryBoundWitnessValidator(obj) {
|
|
180
|
-
return obj?.constructor === _QueryBoundWitnessValidator;
|
|
181
|
-
}
|
|
182
|
-
async validate() {
|
|
183
|
-
return [
|
|
184
|
-
...await super.validate()
|
|
185
|
-
// ...this.validateResultSet()
|
|
186
|
-
];
|
|
187
|
-
}
|
|
188
|
-
async validateResultSet() {
|
|
189
|
-
const errors = [];
|
|
190
|
-
try {
|
|
191
|
-
const resultSetHash = assertEx3(this.obj.resultSet, "Missing ResultSet");
|
|
192
|
-
const wrapper = BoundWitnessWrapper2.parse(this.obj);
|
|
193
|
-
const resultSet = PayloadWrapper3.wrap((await wrapper.payloadMap())[resultSetHash]);
|
|
194
|
-
const required = resultSet?.payload().required;
|
|
195
|
-
if (required) {
|
|
196
|
-
Object.entries(required).forEach(([key, value]) => {
|
|
197
|
-
const found = wrapper.payloadSchemas.reduce((count, schema) => {
|
|
198
|
-
return count + (schema === key ? 1 : 0);
|
|
199
|
-
}, 0);
|
|
200
|
-
if (found !== value) {
|
|
201
|
-
errors.push(Error(`validateResultSet: Missing Schema [${key}:${found}:${value}]`));
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
} catch (ex) {
|
|
206
|
-
handleError(ex, (error) => {
|
|
207
|
-
errors.push(error);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
return errors;
|
|
211
|
-
}
|
|
212
164
|
};
|
|
213
165
|
|
|
214
166
|
// src/Query/QueryBoundWitnessWrapper.ts
|
|
215
|
-
import { assertEx as
|
|
167
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
216
168
|
import { compact } from "@xylabs/lodash";
|
|
217
|
-
import { BoundWitnessWrapper as
|
|
169
|
+
import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
|
|
218
170
|
import { PayloadHasher as PayloadHasher2 } from "@xyo-network/core";
|
|
219
|
-
import { PayloadWrapper as
|
|
220
|
-
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends
|
|
171
|
+
import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
|
|
172
|
+
var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
|
|
221
173
|
_payloadsWithoutQuery;
|
|
222
174
|
_query;
|
|
223
175
|
_resultSet;
|
|
224
176
|
isQueryBoundWitnessWrapper = true;
|
|
225
177
|
static parseQuery(obj, payloads) {
|
|
226
|
-
|
|
178
|
+
assertEx3(!Array.isArray(obj), "Array can not be converted to QueryBoundWitnessWrapper");
|
|
227
179
|
switch (typeof obj) {
|
|
228
180
|
case "object": {
|
|
229
181
|
const castWrapper = obj;
|
|
@@ -233,28 +185,17 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
233
185
|
}
|
|
234
186
|
throw Error(`Unable to parse [${typeof obj}]`);
|
|
235
187
|
}
|
|
236
|
-
getErrors() {
|
|
237
|
-
return new QueryBoundWitnessValidator(this.boundwitness).validate();
|
|
238
|
-
}
|
|
239
188
|
async getQuery() {
|
|
240
189
|
const payloadMap = await this.allPayloadMap();
|
|
241
190
|
this._query = this._query ?? payloadMap[this.boundwitness.query];
|
|
242
|
-
return
|
|
243
|
-
}
|
|
244
|
-
async getResultSet() {
|
|
245
|
-
const resultSetHash = this.boundwitness.resultSet;
|
|
246
|
-
const payloadMap = await this.payloadMap();
|
|
247
|
-
return assertEx4(
|
|
248
|
-
this._resultSet = this._resultSet ?? (resultSetHash ? payloadMap[resultSetHash] : void 0),
|
|
249
|
-
`Missing resultSet [${resultSetHash}]`
|
|
250
|
-
);
|
|
191
|
+
return assertEx3(this._query, `Missing Query [${this.boundwitness}]`);
|
|
251
192
|
}
|
|
252
193
|
async getWrappedPayloads() {
|
|
253
194
|
this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact(
|
|
254
195
|
(await PayloadHasher2.filterExclude(
|
|
255
196
|
(await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
|
|
256
197
|
this.payload().query
|
|
257
|
-
)).map((payload) =>
|
|
198
|
+
)).map((payload) => PayloadWrapper3.wrap(payload))
|
|
258
199
|
);
|
|
259
200
|
return this._payloadsWithoutQuery;
|
|
260
201
|
}
|
|
@@ -262,9 +203,6 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
|
|
|
262
203
|
export {
|
|
263
204
|
BoundWitnessBuilder,
|
|
264
205
|
QueryBoundWitnessBuilder,
|
|
265
|
-
|
|
266
|
-
QueryBoundWitnessValidator,
|
|
267
|
-
QueryBoundWitnessWrapper,
|
|
268
|
-
isQueryBoundWitness
|
|
206
|
+
QueryBoundWitnessWrapper
|
|
269
207
|
};
|
|
270
208
|
//# sourceMappingURL=index.js.map
|
|
@@ -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"]}
|