@xyo-network/boundwitness-builder 2.90.16 → 2.90.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 +6 -6
- package/dist/browser/Builder.d.cts.map +1 -1
- package/dist/browser/Builder.d.mts +6 -6
- package/dist/browser/Builder.d.mts.map +1 -1
- package/dist/browser/Builder.d.ts +6 -6
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/index.cjs +25 -27
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +15 -17
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Builder.d.cts +6 -6
- package/dist/node/Builder.d.cts.map +1 -1
- package/dist/node/Builder.d.mts +6 -6
- package/dist/node/Builder.d.mts.map +1 -1
- package/dist/node/Builder.d.ts +6 -6
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/index.cjs +25 -27
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +15 -17
- package/dist/node/index.js.map +1 -1
- package/package.json +8 -7
- package/src/Builder.ts +19 -25
|
@@ -2,7 +2,7 @@ import { Address, Hash } from '@xylabs/hex';
|
|
|
2
2
|
import { AnyObject, JsonObject } from '@xylabs/object';
|
|
3
3
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
4
|
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
5
|
-
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
6
6
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
@@ -36,7 +36,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
36
36
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
37
37
|
static build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>): Promise<[WithMeta<TBoundWitness>, WithMeta<{
|
|
38
38
|
schema: string;
|
|
39
|
-
} & object>[], WithMeta<import("@xyo-network/payload").SchemaFields & object & {
|
|
39
|
+
} & object>[], WithMeta<import("@xyo-network/payload-model").SchemaFields & object & {
|
|
40
40
|
message?: string | undefined;
|
|
41
41
|
name?: string | undefined;
|
|
42
42
|
query?: string | undefined;
|
|
@@ -53,11 +53,11 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
55
55
|
dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>>;
|
|
56
|
-
error(payload?: ModuleError):
|
|
57
|
-
errors(errors?: (ModuleError | null)[]):
|
|
56
|
+
error(payload?: ModuleError): this;
|
|
57
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
58
58
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
59
|
-
payload(payload?: TPayload):
|
|
60
|
-
payloads(payloads?: (TPayload | null)[]):
|
|
59
|
+
payload(payload?: TPayload): this;
|
|
60
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
61
61
|
sourceQuery(query?: Hash): this;
|
|
62
62
|
witness(account: AccountInstance): this;
|
|
63
63
|
witnesses(accounts: AccountInstance[]): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Address, Hash } from '@xylabs/hex';
|
|
|
2
2
|
import { AnyObject, JsonObject } from '@xylabs/object';
|
|
3
3
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
4
|
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
5
|
-
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
6
6
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
@@ -36,7 +36,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
36
36
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
37
37
|
static build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>): Promise<[WithMeta<TBoundWitness>, WithMeta<{
|
|
38
38
|
schema: string;
|
|
39
|
-
} & object>[], WithMeta<import("@xyo-network/payload").SchemaFields & object & {
|
|
39
|
+
} & object>[], WithMeta<import("@xyo-network/payload-model").SchemaFields & object & {
|
|
40
40
|
message?: string | undefined;
|
|
41
41
|
name?: string | undefined;
|
|
42
42
|
query?: string | undefined;
|
|
@@ -53,11 +53,11 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
55
55
|
dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>>;
|
|
56
|
-
error(payload?: ModuleError):
|
|
57
|
-
errors(errors?: (ModuleError | null)[]):
|
|
56
|
+
error(payload?: ModuleError): this;
|
|
57
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
58
58
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
59
|
-
payload(payload?: TPayload):
|
|
60
|
-
payloads(payloads?: (TPayload | null)[]):
|
|
59
|
+
payload(payload?: TPayload): this;
|
|
60
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
61
61
|
sourceQuery(query?: Hash): this;
|
|
62
62
|
witness(account: AccountInstance): this;
|
|
63
63
|
witnesses(accounts: AccountInstance[]): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Address, Hash } from '@xylabs/hex';
|
|
|
2
2
|
import { AnyObject, JsonObject } from '@xylabs/object';
|
|
3
3
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
4
|
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
5
|
-
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
6
6
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
@@ -36,7 +36,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
36
36
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
37
37
|
static build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>): Promise<[WithMeta<TBoundWitness>, WithMeta<{
|
|
38
38
|
schema: string;
|
|
39
|
-
} & object>[], WithMeta<import("@xyo-network/payload").SchemaFields & object & {
|
|
39
|
+
} & object>[], WithMeta<import("@xyo-network/payload-model").SchemaFields & object & {
|
|
40
40
|
message?: string | undefined;
|
|
41
41
|
name?: string | undefined;
|
|
42
42
|
query?: string | undefined;
|
|
@@ -53,11 +53,11 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
55
55
|
dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>>;
|
|
56
|
-
error(payload?: ModuleError):
|
|
57
|
-
errors(errors?: (ModuleError | null)[]):
|
|
56
|
+
error(payload?: ModuleError): this;
|
|
57
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
58
58
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
59
|
-
payload(payload?: TPayload):
|
|
60
|
-
payloads(payloads?: (TPayload | null)[]):
|
|
59
|
+
payload(payload?: TPayload): this;
|
|
60
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
61
61
|
sourceQuery(query?: Hash): this;
|
|
62
62
|
witness(account: AccountInstance): this;
|
|
63
63
|
witnesses(accounts: AccountInstance[]): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAkB,kBAAkB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -32,9 +32,9 @@ var import_assert = require("@xylabs/assert");
|
|
|
32
32
|
var import_hex = require("@xylabs/hex");
|
|
33
33
|
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
34
34
|
var import_hash = require("@xyo-network/hash");
|
|
35
|
-
var
|
|
35
|
+
var import_payload_builder = require("@xyo-network/payload-builder");
|
|
36
36
|
var import_async_mutex = require("async-mutex");
|
|
37
|
-
var BoundWitnessBuilder = class _BoundWitnessBuilder extends
|
|
37
|
+
var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload_builder.PayloadBuilderBase {
|
|
38
38
|
static {
|
|
39
39
|
__name(this, "BoundWitnessBuilder");
|
|
40
40
|
}
|
|
@@ -90,10 +90,10 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
90
90
|
return await new _BoundWitnessBuilder(options).build();
|
|
91
91
|
}
|
|
92
92
|
static async dataHashableFields(schema, fields) {
|
|
93
|
-
return await
|
|
93
|
+
return await import_payload_builder.PayloadBuilderBase.dataHashableFields(schema, fields ? (0, import_hash.removeEmptyFields)(fields) : void 0);
|
|
94
94
|
}
|
|
95
95
|
static async hashableFields(schema, fields, $meta, $hash, timestamp) {
|
|
96
|
-
return await
|
|
96
|
+
return await import_payload_builder.PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp);
|
|
97
97
|
}
|
|
98
98
|
static previousHash(boundWitness, address) {
|
|
99
99
|
return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase();
|
|
@@ -103,7 +103,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
103
103
|
prefix: false
|
|
104
104
|
}));
|
|
105
105
|
const previous_hashes = accounts.map((account) => account.previousHash ?? null);
|
|
106
|
-
const payload_hashes = payloads ? await
|
|
106
|
+
const payload_hashes = payloads ? await import_payload_builder.PayloadBuilder.dataHashes(payloads) : [];
|
|
107
107
|
const payload_schemas = payloads?.map(({ schema }) => schema);
|
|
108
108
|
return {
|
|
109
109
|
addresses,
|
|
@@ -115,7 +115,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
115
115
|
}
|
|
116
116
|
static async metaFields(dataHash, otherMeta, accounts, previousHashes, destination, sourceQuery) {
|
|
117
117
|
const meta = {
|
|
118
|
-
...await
|
|
118
|
+
...await import_payload_builder.PayloadBuilderBase.metaFields(dataHash, otherMeta)
|
|
119
119
|
};
|
|
120
120
|
if (accounts?.length && previousHashes?.length) {
|
|
121
121
|
(0, import_assert.assertEx)(accounts.length === previousHashes.length, "accounts and previousHashes must have same length");
|
|
@@ -145,7 +145,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
145
145
|
async build() {
|
|
146
146
|
return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
|
|
147
147
|
const dataHashableFields = await this.dataHashableFields();
|
|
148
|
-
const $hash = (await
|
|
148
|
+
const $hash = (await import_payload_builder.PayloadBuilder.build(dataHashableFields)).$hash;
|
|
149
149
|
const $meta = await this.metaFields($hash);
|
|
150
150
|
const ret = {
|
|
151
151
|
...dataHashableFields,
|
|
@@ -154,8 +154,8 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
154
154
|
};
|
|
155
155
|
return [
|
|
156
156
|
ret,
|
|
157
|
-
await Promise.all(this._payloads?.map((payload) =>
|
|
158
|
-
await Promise.all(this._errors?.map((error) =>
|
|
157
|
+
await Promise.all(this._payloads?.map((payload) => import_payload_builder.PayloadBuilder.build(payload))),
|
|
158
|
+
await Promise.all(this._errors?.map((error) => import_payload_builder.PayloadBuilder.build(error)))
|
|
159
159
|
];
|
|
160
160
|
});
|
|
161
161
|
}
|
|
@@ -165,21 +165,20 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
165
165
|
_BoundWitnessBuilder.validateLinkingFields(result);
|
|
166
166
|
return result;
|
|
167
167
|
}
|
|
168
|
-
|
|
169
|
-
const unwrappedPayload = await import_payload.PayloadWrapper.unwrap(payload);
|
|
168
|
+
error(payload) {
|
|
170
169
|
(0, import_assert.assertEx)(this._errorHashes === void 0, "Can not set errors when hashes already set");
|
|
171
|
-
if (
|
|
172
|
-
this._errors.push((0, import_assert.assertEx)((0, import_hash.sortFields)(
|
|
170
|
+
if (payload) {
|
|
171
|
+
this._errors.push((0, import_assert.assertEx)((0, import_hash.sortFields)(payload)));
|
|
173
172
|
}
|
|
174
173
|
return this;
|
|
175
174
|
}
|
|
176
|
-
|
|
175
|
+
errors(errors) {
|
|
177
176
|
if (errors) {
|
|
178
|
-
|
|
177
|
+
errors.map((error) => {
|
|
179
178
|
if (error !== null) {
|
|
180
|
-
|
|
179
|
+
this.error(error);
|
|
181
180
|
}
|
|
182
|
-
})
|
|
181
|
+
});
|
|
183
182
|
}
|
|
184
183
|
return this;
|
|
185
184
|
}
|
|
@@ -189,21 +188,20 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.Payl
|
|
|
189
188
|
this._payloadSchemas = schema;
|
|
190
189
|
return this;
|
|
191
190
|
}
|
|
192
|
-
|
|
193
|
-
const unwrappedPayload = await import_payload.PayloadWrapper.unwrap(payload);
|
|
191
|
+
payload(payload) {
|
|
194
192
|
(0, import_assert.assertEx)(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
|
|
195
|
-
if (
|
|
196
|
-
this._payloads.push((0, import_assert.assertEx)((0, import_hash.sortFields)(
|
|
193
|
+
if (payload) {
|
|
194
|
+
this._payloads.push((0, import_assert.assertEx)((0, import_hash.sortFields)(payload)));
|
|
197
195
|
}
|
|
198
196
|
return this;
|
|
199
197
|
}
|
|
200
|
-
|
|
198
|
+
payloads(payloads) {
|
|
201
199
|
if (payloads)
|
|
202
|
-
|
|
200
|
+
payloads.map((payload) => {
|
|
203
201
|
if (payload !== null) {
|
|
204
|
-
|
|
202
|
+
this.payload(payload);
|
|
205
203
|
}
|
|
206
|
-
})
|
|
204
|
+
});
|
|
207
205
|
return this;
|
|
208
206
|
}
|
|
209
207
|
sourceQuery(query) {
|
|
@@ -238,7 +236,7 @@ ${JSON.stringify(payload, null, 2)}`;
|
|
|
238
236
|
// src/Query/QueryBoundWitnessBuilder.ts
|
|
239
237
|
var import_assert2 = require("@xylabs/assert");
|
|
240
238
|
var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
|
|
241
|
-
var
|
|
239
|
+
var import_payload = require("@xyo-network/payload");
|
|
242
240
|
var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
243
241
|
static {
|
|
244
242
|
__name(this, "QueryBoundWitnessBuilder");
|
|
@@ -259,7 +257,7 @@ var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
|
259
257
|
};
|
|
260
258
|
}
|
|
261
259
|
async query(query) {
|
|
262
|
-
this._query = await
|
|
260
|
+
this._query = await import_payload.PayloadBuilder.build(query);
|
|
263
261
|
await this.payload(this._query);
|
|
264
262
|
return this;
|
|
265
263
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions, PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map((account) => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map((account) => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map((account) => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n async error(payload?: ModuleError) {\n const unwrappedPayload = await 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 async errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n await Promise.all(\n errors.map(async (error) => {\n if (error !== null) {\n await this.error(error)\n }\n }),\n )\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\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 async payload(payload?: TPayload) {\n const unwrappedPayload = await 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 async payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n await Promise.all(\n payloads.map(async (payload) => {\n if (payload !== null) {\n await this.payload(payload)\n }\n }),\n )\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\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 override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\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: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","unwrappedPayload","PayloadWrapper","unwrap","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","import_assert","import_boundwitness_model","import_payload","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map((account) => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map((account) => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map((account) => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\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 assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\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 override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\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: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { assertEx } from "@xylabs/assert";
|
|
|
7
7
|
import { hexFromArrayBuffer } from "@xylabs/hex";
|
|
8
8
|
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
9
9
|
import { removeEmptyFields, sortFields } from "@xyo-network/hash";
|
|
10
|
-
import { PayloadBuilder, PayloadBuilderBase
|
|
10
|
+
import { PayloadBuilder, PayloadBuilderBase } from "@xyo-network/payload-builder";
|
|
11
11
|
import { Mutex } from "async-mutex";
|
|
12
12
|
var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase {
|
|
13
13
|
static {
|
|
@@ -140,21 +140,20 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
|
|
|
140
140
|
_BoundWitnessBuilder.validateLinkingFields(result);
|
|
141
141
|
return result;
|
|
142
142
|
}
|
|
143
|
-
|
|
144
|
-
const unwrappedPayload = await PayloadWrapper.unwrap(payload);
|
|
143
|
+
error(payload) {
|
|
145
144
|
assertEx(this._errorHashes === void 0, "Can not set errors when hashes already set");
|
|
146
|
-
if (
|
|
147
|
-
this._errors.push(assertEx(sortFields(
|
|
145
|
+
if (payload) {
|
|
146
|
+
this._errors.push(assertEx(sortFields(payload)));
|
|
148
147
|
}
|
|
149
148
|
return this;
|
|
150
149
|
}
|
|
151
|
-
|
|
150
|
+
errors(errors) {
|
|
152
151
|
if (errors) {
|
|
153
|
-
|
|
152
|
+
errors.map((error) => {
|
|
154
153
|
if (error !== null) {
|
|
155
|
-
|
|
154
|
+
this.error(error);
|
|
156
155
|
}
|
|
157
|
-
})
|
|
156
|
+
});
|
|
158
157
|
}
|
|
159
158
|
return this;
|
|
160
159
|
}
|
|
@@ -164,21 +163,20 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
|
|
|
164
163
|
this._payloadSchemas = schema;
|
|
165
164
|
return this;
|
|
166
165
|
}
|
|
167
|
-
|
|
168
|
-
const unwrappedPayload = await PayloadWrapper.unwrap(payload);
|
|
166
|
+
payload(payload) {
|
|
169
167
|
assertEx(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
|
|
170
|
-
if (
|
|
171
|
-
this._payloads.push(assertEx(sortFields(
|
|
168
|
+
if (payload) {
|
|
169
|
+
this._payloads.push(assertEx(sortFields(payload)));
|
|
172
170
|
}
|
|
173
171
|
return this;
|
|
174
172
|
}
|
|
175
|
-
|
|
173
|
+
payloads(payloads) {
|
|
176
174
|
if (payloads)
|
|
177
|
-
|
|
175
|
+
payloads.map((payload) => {
|
|
178
176
|
if (payload !== null) {
|
|
179
|
-
|
|
177
|
+
this.payload(payload);
|
|
180
178
|
}
|
|
181
|
-
})
|
|
179
|
+
});
|
|
182
180
|
return this;
|
|
183
181
|
}
|
|
184
182
|
sourceQuery(query) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions, PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map((account) => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map((account) => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map((account) => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n async error(payload?: ModuleError) {\n const unwrappedPayload = await 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 async errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n await Promise.all(\n errors.map(async (error) => {\n if (error !== null) {\n await this.error(error)\n }\n }),\n )\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\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 async payload(payload?: TPayload) {\n const unwrappedPayload = await 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 async payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n await Promise.all(\n payloads.map(async (payload) => {\n if (payload !== null) {\n await this.payload(payload)\n }\n }),\n )\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\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 override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\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: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","removeEmptyFields","sortFields","PayloadBuilder","PayloadBuilderBase","PayloadWrapper","Mutex","BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","unwrappedPayload","PayloadWrapper","unwrap","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","assertEx","QueryBoundWitnessSchema","PayloadBuilder","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { AnyObject, JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: string[]\n private _errorHashes?: string[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: string[]\n private _payloadSchemas?: string[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n return this._accounts.map((account) => account.address.toLowerCase())\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map((account) => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map((account) => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n ): Promise<Omit<T, '$hash' | '$meta'>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static override async hashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: Omit<T, 'schema' | '$hash' | '$meta'>,\n $meta?: JsonObject,\n $hash?: Hash,\n timestamp?: number,\n ): Promise<WithMeta<T>> {\n return await PayloadBuilderBase.hashableFields(schema, fields, $meta, $hash, timestamp)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map((account) => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return { addresses, payload_hashes, payload_schemas, previous_hashes, timestamp } as Omit<T, '$meta' | '$hash' | 'schema'>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta: JsonObject = { ...(await PayloadBuilderBase.metaFields(dataHash, otherMeta)) }\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map((payload) => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map((error) => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n errors.map((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\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 assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n payloads.map((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase()\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 override async metaFields(dataHash: Hash): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(dataHash, this._$meta, this._accounts, this.previousHashes, this._destination, this._sourceQuery)\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\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 { PayloadBuilder } from '@xyo-network/payload'\nimport { Query, WithMeta } from '@xyo-network/payload-model'\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: WithMeta<TQuery> | undefined\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n return {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n }\n\n override async hashableFields(): Promise<WithMeta<TBoundWitness>> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as WithMeta<TBoundWitness>\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n await this.payload(this._query)\n return this\n }\n}\n"],"mappings":";;;;AAAA,SAASA,eAAeC,oBAAoB;AAC5C,SAASC,gBAAgB;AACzB,SAAwBC,0BAA0B;AAGlD,SAAuBC,0BAA0B;AACjD,SAASC,mBAAmBC,kBAAkB;AAC9C,SAASC,gBAAgBC,0BAAiD;AAE1E,SAASC,aAAa;AAef,IAAMC,sBAAN,MAAMA,6BAAmHC,mBAAAA;EAxBhI,OAwBgIA;;;EAI9H,OAAwBC,cAAc,IAAIC,MAAAA;EAClCC;EACAC;EACAC;EACAC,UAAyB,CAAA;EACzBC;EACAC;EACAC;EACAC;EACAC;EAERC,YAAYC,SAA+D;AACzE,UAAM;MAAE,GAAGA;MAASC,QAAQC;IAAmB,CAAA;AAC/C,UAAM,EAAEC,UAAUC,eAAeC,gBAAgBC,UAAUC,aAAaC,WAAWC,YAAW,IAAKT,WAAW,CAAC;AAC/G,SAAKV,YAAYa,YAAY,CAAA;AAC7B,SAAKT,iBAAiBU;AACtB,SAAKT,kBAAkBU;AACvB,SAAKT,YAAYU,YAAY,CAAA;AAC7B,SAAKT,eAAeU;AACpB,SAAKhB,eAAekB;AACpB,SAAKX,aAAaU,aAAa;EACjC;EAEA,IAAcE,YAAuB;AACnC,WAAO,KAAKpB,UAAUqB,IAAI,CAACC,YAAYA,QAAQC,QAAQC,YAAW,CAAA;EACpE;EAEA,IAAcT,iBAA2B;AACvC,WACE,KAAKV,mBACL,KAAKC,UAAUe,IAAI,CAACI,YAAAA;AAClB,aAAOC,SAASD,QAAQd,QAAQ,MAAM,KAAKgB,qBAAqBF,OAAAA,CAAAA;IAClE,CAAA;EAEJ;EAEA,IAAcG,sBAA8C;AAC1D,WAAO,KAAK5B,UAAUqB,IAAI,CAACC,YAAYA,QAAQO,qBAAqB,IAAA;EACtE;EAEA,IAAcC,iBAAkC;AAC9C,WAAO,KAAK9B,UAAUqB,IAAI,CAACC,YAAYA,QAAQS,gBAAgB,IAAA;EACjE;EAEA,IAAcb,YAAoB;AAChC,WAAQ,KAAKV,aAAa,OAAO,KAAKA,eAAe,WAAW,KAAKA,aAAawB,KAAKC,IAAG;EAC5F;EAEA,OAAOC,aAAqCT,SAAYF,SAAkB;AACxE,UAAMY,QAAQV,QAAQL,UAAUgB,QAAQb,OAAAA;AACxC,QAAIY,UAAU,IAAI;AAChB,YAAM,IAAIE,MAAM,iBAAA;IAClB;AACA,WAAOF;EACT;EAEA,aAAaG,MAA0C5B,SAAoD;AACzG,WAAO,MAAM,IAAId,qBAAoBc,OAAAA,EAAS4B,MAAK;EACrD;EAEA,aAAsBC,mBACpB5B,QACA6B,QACqC;AACrC,WAAO,MAAM3C,mBAAmB0C,mBAAmB5B,QAAQ6B,SAASC,kBAAkBD,MAAAA,IAAUE,MAAAA;EAClG;EAEA,aAAsBC,eACpBhC,QACA6B,QACAI,OACAC,OACA3B,WACsB;AACtB,WAAO,MAAMrB,mBAAmB8C,eAAehC,QAAQ6B,QAAQI,OAAOC,OAAO3B,SAAAA;EAC/E;EAEA,OAAOa,aAAqCe,cAAiBvB,SAAkB;AAC7E,WAAOuB,aAAaC,gBAAgB,KAAKb,aAAaY,cAAcvB,OAAAA,CAAAA,GAAWC,YAAAA;EACjF;EAEA,aAAuBwB,cACrBnC,UACAG,UACAE,YAAYc,KAAKC,IAAG,GACpB;AACA,UAAMb,YAAYP,SAASQ,IAAI,CAACC,YAAY2B,mBAAmB3B,QAAQ4B,cAAc;MAAEC,QAAQ;IAAM,CAAA,CAAA;AACrG,UAAMJ,kBAAkBlC,SAASQ,IAAI,CAACC,YAAYA,QAAQS,gBAAgB,IAAA;AAC1E,UAAMqB,iBAAiBpC,WAAW,MAAMqC,eAAeC,WAAWtC,QAAAA,IAAY,CAAA;AAC9E,UAAMuC,kBAAkBvC,UAAUK,IAAI,CAAC,EAAEV,OAAM,MAAOA,MAAAA;AACtD,WAAO;MAAES;MAAWgC;MAAgBG;MAAiBR;MAAiB7B;IAAU;EAClF;EAEA,aAAgCsC,WAC9BC,UACAC,WACA7C,UACAiB,gBACAX,aACAF,aACqB;AACrB,UAAM0C,OAAmB;MAAE,GAAI,MAAM9D,mBAAmB2D,WAAWC,UAAUC,SAAAA;IAAY;AAEzF,QAAI7C,UAAU+C,UAAU9B,gBAAgB8B,QAAQ;AAC9ClC,eAASb,SAAS+C,WAAW9B,eAAe8B,QAAQ,mDAAA;AACpDD,WAAKE,aAAa,MAAM,KAAKA,WAAWhD,UAAU4C,UAAU3B,cAAAA;IAC9D;AAEA,QAAIb,aAAa;AACf0C,WAAK1C,cAAcA;IACrB;AAEA,QAAIE,aAAa;AACfwC,WAAKxC,cAAcA;IACrB;AAEA,WAAOwC;EACT;EAEA,OAAiBG,UAAkCrC,SAAYF,SAAkB;AAC/E,WAAOE,QAAQmB,MAAMiB,WAAW,KAAK3B,aAAaT,SAASF,OAAAA,CAAAA;EAC7D;EAEA,aAAuBsC,WAAWhD,UAA6BkD,MAAYjC,gBAAkE;AAC3I,UAAMkC,YAAYC,cAAcF,IAAAA;AAChC,UAAMG,sBAAsBpC,gBAAgBT,IAAI,CAAC8C,OAAQA,KAAKC,aAAaD,EAAAA,IAAMzB,MAAAA;AACjF,WAAO,MAAM2B,QAAQC,IAAIzD,SAASQ,IAAI,OAAOC,SAASa,UAAUc,mBAAmB,MAAM3B,QAAQiD,KAAKP,WAAWE,oBAAoB/B,KAAAA,CAAM,CAAA,CAAA,CAAA;EAC7I;EAEA,OAAeqC,sBAAsBC,IAA8D;AACjG/C,aAAS+C,GAAGrB,gBAAgBQ,WAAWa,GAAGlB,iBAAiBK,QAAQ,8BAAA;AACnElC,aAAS,CAAC+C,GAAGrB,eAAesB,KAAK,CAACX,SAAS,CAACA,IAAAA,GAAO,MAAM,uBAAA;AACzDrC,aAAS,CAAC+C,GAAGlB,gBAAgBmB,KAAK,CAAC/D,WAAW,CAACA,MAAAA,GAAS,wBAAA;EAC1D;EAEA,MAAM2B,QAA2F;AAC/F,WAAO,MAAM1C,qBAAoBE,YAAY6E,aAAa,YAAA;AACxD,YAAMpC,qBAAsB,MAAM,KAAKA,mBAAkB;AACzD,YAAMM,SAAS,MAAMQ,eAAef,MAAMC,kBAAAA,GAAqBM;AAC/D,YAAMD,QAAQ,MAAM,KAAKY,WAAWX,KAAAA;AAEpC,YAAM+B,MAAM;QACV,GAAGrC;QACHM;QACAD;MACF;AACA,aAAO;QACLgC;QACA,MAAMP,QAAQC,IAAI,KAAKhE,WAAWe,IAAI,CAACI,YAAY4B,eAAef,MAAMb,OAAAA,CAAAA,CAAAA;QACxE,MAAM4C,QAAQC,IAAI,KAAKnE,SAASkB,IAAI,CAACwD,UAAUxB,eAAef,MAAMuC,KAAAA,CAAAA,CAAAA;;IAExE,CAAA;EACF;EAEA,MAAetC,qBAAsE;AACnF,UAAMC,SAAS,MAAM,KAAKQ,cAAa;AACvC,UAAM8B,SAAS,MAAMlF,qBAAoB2C,mBAAkC,KAAKwC,SAASvC,MAAAA;AAEzF5C,yBAAoB4E,sBAAsBM,MAAAA;AAE1C,WAAOA;EACT;EAEAD,MAAMpD,SAAuB;AAC3BC,aAAS,KAAKxB,iBAAiBwC,QAAW,4CAAA;AAC1C,QAAIjB,SAAS;AACX,WAAKtB,QAAQ6E,KAAKtD,SAASuD,WAAWxD,OAAAA,CAAAA,CAAAA;IACxC;AACA,WAAO;EACT;EAEAyD,OAAOA,QAAiC;AACtC,QAAIA,QAAQ;AACVA,aAAO7D,IAAI,CAACwD,UAAAA;AACV,YAAIA,UAAU,MAAM;AAClB,eAAKA,MAAMA,KAAAA;QACb;MACF,CAAA;IACF;AACA,WAAO;EACT;EAEAM,OAAOA,QAAgBxE,QAAkB;AACvCe,aAAS,KAAKV,SAAS4C,WAAW,GAAG,8CAAA;AACrC,SAAKxD,iBAAiB+E;AACtB,SAAK9E,kBAAkBM;AACvB,WAAO;EACT;EAEAc,QAAQA,SAAoB;AAC1BC,aAAS,KAAKtB,mBAAmBsC,QAAW,8CAAA;AAC5C,QAAIjB,SAAS;AACX,WAAKnB,UAAU0E,KAAKtD,SAASuD,WAAqBxD,OAAAA,CAAAA,CAAAA;IACpD;AACA,WAAO;EACT;EAEAT,SAASA,UAAgC;AACvC,QAAIA;AACFA,eAASK,IAAI,CAACI,YAAAA;AACZ,YAAIA,YAAY,MAAM;AACpB,eAAKA,QAAQA,OAAAA;QACf;MACF,CAAA;AACF,WAAO;EACT;EAEAR,YAAYmE,OAAc;AACxB,SAAK7E,eAAe6E,OAAO5D,YAAAA;AAC3B,WAAO;EACT;EAEA6D,QAAQ/D,SAA0B;AAChC,SAAKtB,WAAWgF,KAAK1D,OAAAA;AACrB,WAAO;EACT;EAEAgE,UAAUzE,UAA6B;AACrC,SAAKb,WAAWgF,KAAAA,GAAQnE,QAAAA;AACxB,WAAO;EACT;EAEA,MAAyB2C,WAAWC,UAAqC;AACvE,WAAO,MAAM7D,qBAAoB4D,WAAWC,UAAU,KAAK8B,QAAQ,KAAKvF,WAAW,KAAK8B,gBAAgB,KAAK7B,cAAc,KAAKM,YAAY;EAC9I;EAEA,MAAgBsD,WAAW2B,OAAa1D,gBAAkE;AACxG,UAAMiC,OAAOE,cAAcuB,KAAAA;AAC3B,UAAMtB,sBAAsBpC,eAAeT,IAAI,CAAC8C,OAAQA,KAAKC,aAAaD,EAAAA,IAAMzB,MAAAA;AAChF,WAAO,MAAM2B,QAAQC,IAAI,KAAKtE,UAAUqB,IAAI,OAAOC,SAASa,UAAUc,mBAAmB,MAAM3B,QAAQiD,KAAKR,MAAMG,oBAAoB/B,KAAAA,CAAM,CAAA,CAAA,CAAA;EAC9I;EAEA,MAAca,gBAAgB;AAC5B,WAAO,MAAMpD,qBAAoBoD,cAA6B,KAAKhD,WAAW,KAAKM,WAAW,KAAKY,SAAS;EAC9G;EAEQS,qBAAqBF,SAAkB;AAC7C,WAAO;EAA4BgE,KAAKC,UAAUjE,SAAS,MAAM,CAAA,CAAA;EACnE;AACF;;;AC3QA,SAASkE,YAAAA,iBAAgB;AACzB,SAA4BC,+BAA+B;AAC3D,SAASC,kBAAAA,uBAAsB;AAKxB,IAAMC,2BAAN,cAGGC,oBAAAA;EAVV,OAUUA;;;EACAC;EAER,MAAeC,qBAAsE;AACnF,WAAO;MACL,GAAI,MAAM,MAAMA,mBAAAA;MAChBC,OAAOC,UAAS,KAAKH,QAAQ,oBAAA,EAAsBI;MACnDC,QAAQC;IACV;EACF;EAEA,MAAeC,iBAAmD;AAChE,WAAO;MACL,GAAI,MAAM,MAAMA,eAAAA;MAChBL,OAAOC,UAAS,KAAKH,QAAQ,oBAAA,EAAsBI;MACnDC,QAAQC;IACV;EACF;EAEA,MAAMJ,MAAwBA,OAAU;AACtC,SAAKF,SAAS,MAAMQ,gBAAeC,MAAMP,KAAAA;AACzC,UAAM,KAAKQ,QAAQ,KAAKV,MAAM;AAC9B,WAAO;EACT;AACF;","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","removeEmptyFields","sortFields","PayloadBuilder","PayloadBuilderBase","Mutex","BoundWitnessBuilder","PayloadBuilderBase","_buildMutex","Mutex","_accounts","_destination","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","options","schema","BoundWitnessSchema","accounts","payloadHashes","payloadSchemas","payloads","sourceQuery","timestamp","destination","addresses","map","account","address","toLowerCase","payload","assertEx","missingSchemaMessage","previousHashBuffers","previousHashBytes","previousHashes","previousHash","Date","now","addressIndex","index","indexOf","Error","build","dataHashableFields","fields","removeEmptyFields","undefined","hashableFields","$meta","$hash","boundWitness","previous_hashes","linkingFields","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","PayloadBuilder","dataHashes","payload_schemas","metaFields","dataHash","otherMeta","meta","length","signatures","signature","hash","hashBytes","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","sign","validateLinkingFields","bw","some","runExclusive","ret","error","result","_schema","push","sortFields","errors","hashes","query","witness","witnesses","_$meta","_hash","JSON","stringify","assertEx","QueryBoundWitnessSchema","PayloadBuilder","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","dataHashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","hashableFields","PayloadBuilder","build","payload"]}
|
package/dist/node/Builder.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ import { Address, Hash } from '@xylabs/hex';
|
|
|
2
2
|
import { AnyObject, JsonObject } from '@xylabs/object';
|
|
3
3
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
4
|
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
5
|
-
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload-builder';
|
|
6
6
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
7
7
|
export type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
8
8
|
export interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
@@ -36,7 +36,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
36
36
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
37
37
|
static build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>): Promise<[WithMeta<TBoundWitness>, WithMeta<{
|
|
38
38
|
schema: string;
|
|
39
|
-
} & object>[], WithMeta<import("@xyo-network/payload").SchemaFields & object & {
|
|
39
|
+
} & object>[], WithMeta<import("@xyo-network/payload-model").SchemaFields & object & {
|
|
40
40
|
message?: string | undefined;
|
|
41
41
|
name?: string | undefined;
|
|
42
42
|
query?: string | undefined;
|
|
@@ -53,11 +53,11 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
|
|
|
53
53
|
private static validateLinkingFields;
|
|
54
54
|
build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]>;
|
|
55
55
|
dataHashableFields(): Promise<Omit<TBoundWitness, '$meta' | '$hash'>>;
|
|
56
|
-
error(payload?: ModuleError):
|
|
57
|
-
errors(errors?: (ModuleError | null)[]):
|
|
56
|
+
error(payload?: ModuleError): this;
|
|
57
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
58
58
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
59
|
-
payload(payload?: TPayload):
|
|
60
|
-
payloads(payloads?: (TPayload | null)[]):
|
|
59
|
+
payload(payload?: TPayload): this;
|
|
60
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
61
61
|
sourceQuery(query?: Hash): this;
|
|
62
62
|
witness(account: AccountInstance): this;
|
|
63
63
|
witnesses(accounts: AccountInstance[]): this;
|