@xyo-network/boundwitness-builder 2.89.0-rc.8 → 2.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/Builder.d.cts +24 -23
- package/dist/browser/Builder.d.cts.map +1 -1
- package/dist/browser/Builder.d.mts +24 -23
- package/dist/browser/Builder.d.mts.map +1 -1
- package/dist/browser/Builder.d.ts +24 -23
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/index.cjs +41 -34
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +42 -35
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Builder.d.cts +24 -23
- package/dist/node/Builder.d.cts.map +1 -1
- package/dist/node/Builder.d.mts +24 -23
- package/dist/node/Builder.d.mts.map +1 -1
- package/dist/node/Builder.d.ts +24 -23
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/index.cjs +41 -34
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +42 -35
- package/dist/node/index.js.map +1 -1
- package/package.json +12 -13
- package/src/Builder.ts +67 -52
|
@@ -1,48 +1,49 @@
|
|
|
1
1
|
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
-
import { Logger } from '@xylabs/logger';
|
|
3
2
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
|
-
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
+
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
5
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
readonly
|
|
10
|
-
|
|
11
|
-
readonly
|
|
12
|
-
|
|
13
|
-
readonly
|
|
6
|
+
type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
7
|
+
export interface BoundWitnessBuilderOptions<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<T, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
8
|
+
readonly accounts?: AccountInstance[];
|
|
9
|
+
readonly destination?: string[];
|
|
10
|
+
readonly payloadHashes?: T['payload_hashes'];
|
|
11
|
+
readonly payloadSchemas?: T['payload_schemas'];
|
|
12
|
+
readonly payloads?: TPayload[];
|
|
13
|
+
readonly sourceQuery?: Hash;
|
|
14
|
+
readonly timestamp?: boolean | number;
|
|
14
15
|
}
|
|
15
|
-
export declare class BoundWitnessBuilder<
|
|
16
|
-
schema:
|
|
17
|
-
}>
|
|
18
|
-
readonly config: BoundWitnessBuilderConfig;
|
|
19
|
-
protected readonly logger?: Logger | undefined;
|
|
16
|
+
export declare class BoundWitnessBuilder<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<Omit<T, GeneratedBoundWitnessFields>, BoundWitnessBuilderOptions<T> & {
|
|
17
|
+
schema: BoundWitnessSchema;
|
|
18
|
+
}> {
|
|
20
19
|
private static readonly _buildMutex;
|
|
21
20
|
private _accounts;
|
|
22
|
-
private
|
|
21
|
+
private _destination?;
|
|
22
|
+
private _errorHashes?;
|
|
23
23
|
private _errors;
|
|
24
|
-
private _payloadHashes
|
|
25
|
-
private _payloadSchemas
|
|
24
|
+
private _payloadHashes?;
|
|
25
|
+
private _payloadSchemas?;
|
|
26
26
|
private _payloads;
|
|
27
|
-
private _sourceQuery
|
|
27
|
+
private _sourceQuery?;
|
|
28
28
|
private _timestamp;
|
|
29
|
-
constructor(
|
|
29
|
+
constructor(options?: BoundWitnessBuilderOptions<T, TPayload>);
|
|
30
30
|
private get _payload_schemas();
|
|
31
31
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
32
32
|
static previousHash<T extends BoundWitness>(payload: T, address: Address): string | null;
|
|
33
33
|
static signature<T extends BoundWitness>(payload: T, address: Address): string;
|
|
34
|
-
build(
|
|
34
|
+
build(): Promise<[WithMeta<T>, TPayload[], ModuleError[]]>;
|
|
35
35
|
error(payload?: ModuleError): Promise<this>;
|
|
36
36
|
errors(errors?: (ModuleError | null)[]): Promise<this>;
|
|
37
|
-
hashableFields(): Promise<
|
|
37
|
+
hashableFields(): Promise<T>;
|
|
38
38
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
39
39
|
payload(payload?: TPayload): Promise<this>;
|
|
40
40
|
payloads(payloads?: (TPayload | null)[]): Promise<this>;
|
|
41
|
-
sourceQuery(
|
|
41
|
+
sourceQuery(query?: Hash): this;
|
|
42
42
|
witness(account: AccountInstance): this;
|
|
43
43
|
witnesses(accounts: AccountInstance[]): this;
|
|
44
44
|
protected signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | undefined)[]): Promise<string[]>;
|
|
45
45
|
private getPayloadHashes;
|
|
46
46
|
private missingSchemaMessage;
|
|
47
47
|
}
|
|
48
|
+
export {};
|
|
48
49
|
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,49 @@
|
|
|
1
1
|
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
-
import { Logger } from '@xylabs/logger';
|
|
3
2
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
|
-
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
+
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
5
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
readonly
|
|
10
|
-
|
|
11
|
-
readonly
|
|
12
|
-
|
|
13
|
-
readonly
|
|
6
|
+
type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
7
|
+
export interface BoundWitnessBuilderOptions<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<T, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
8
|
+
readonly accounts?: AccountInstance[];
|
|
9
|
+
readonly destination?: string[];
|
|
10
|
+
readonly payloadHashes?: T['payload_hashes'];
|
|
11
|
+
readonly payloadSchemas?: T['payload_schemas'];
|
|
12
|
+
readonly payloads?: TPayload[];
|
|
13
|
+
readonly sourceQuery?: Hash;
|
|
14
|
+
readonly timestamp?: boolean | number;
|
|
14
15
|
}
|
|
15
|
-
export declare class BoundWitnessBuilder<
|
|
16
|
-
schema:
|
|
17
|
-
}>
|
|
18
|
-
readonly config: BoundWitnessBuilderConfig;
|
|
19
|
-
protected readonly logger?: Logger | undefined;
|
|
16
|
+
export declare class BoundWitnessBuilder<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<Omit<T, GeneratedBoundWitnessFields>, BoundWitnessBuilderOptions<T> & {
|
|
17
|
+
schema: BoundWitnessSchema;
|
|
18
|
+
}> {
|
|
20
19
|
private static readonly _buildMutex;
|
|
21
20
|
private _accounts;
|
|
22
|
-
private
|
|
21
|
+
private _destination?;
|
|
22
|
+
private _errorHashes?;
|
|
23
23
|
private _errors;
|
|
24
|
-
private _payloadHashes
|
|
25
|
-
private _payloadSchemas
|
|
24
|
+
private _payloadHashes?;
|
|
25
|
+
private _payloadSchemas?;
|
|
26
26
|
private _payloads;
|
|
27
|
-
private _sourceQuery
|
|
27
|
+
private _sourceQuery?;
|
|
28
28
|
private _timestamp;
|
|
29
|
-
constructor(
|
|
29
|
+
constructor(options?: BoundWitnessBuilderOptions<T, TPayload>);
|
|
30
30
|
private get _payload_schemas();
|
|
31
31
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
32
32
|
static previousHash<T extends BoundWitness>(payload: T, address: Address): string | null;
|
|
33
33
|
static signature<T extends BoundWitness>(payload: T, address: Address): string;
|
|
34
|
-
build(
|
|
34
|
+
build(): Promise<[WithMeta<T>, TPayload[], ModuleError[]]>;
|
|
35
35
|
error(payload?: ModuleError): Promise<this>;
|
|
36
36
|
errors(errors?: (ModuleError | null)[]): Promise<this>;
|
|
37
|
-
hashableFields(): Promise<
|
|
37
|
+
hashableFields(): Promise<T>;
|
|
38
38
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
39
39
|
payload(payload?: TPayload): Promise<this>;
|
|
40
40
|
payloads(payloads?: (TPayload | null)[]): Promise<this>;
|
|
41
|
-
sourceQuery(
|
|
41
|
+
sourceQuery(query?: Hash): this;
|
|
42
42
|
witness(account: AccountInstance): this;
|
|
43
43
|
witnesses(accounts: AccountInstance[]): this;
|
|
44
44
|
protected signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | undefined)[]): Promise<string[]>;
|
|
45
45
|
private getPayloadHashes;
|
|
46
46
|
private missingSchemaMessage;
|
|
47
47
|
}
|
|
48
|
+
export {};
|
|
48
49
|
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,49 @@
|
|
|
1
1
|
import { Address, Hash } from '@xylabs/hex';
|
|
2
|
-
import { Logger } from '@xylabs/logger';
|
|
3
2
|
import { AccountInstance } from '@xyo-network/account-model';
|
|
4
|
-
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
+
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
4
|
+
import { PayloadBuilderBase, PayloadBuilderOptions } from '@xyo-network/payload';
|
|
5
5
|
import { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
readonly
|
|
10
|
-
|
|
11
|
-
readonly
|
|
12
|
-
|
|
13
|
-
readonly
|
|
6
|
+
type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes';
|
|
7
|
+
export interface BoundWitnessBuilderOptions<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends Omit<PayloadBuilderOptions<Omit<T, GeneratedBoundWitnessFields>>, 'schema'> {
|
|
8
|
+
readonly accounts?: AccountInstance[];
|
|
9
|
+
readonly destination?: string[];
|
|
10
|
+
readonly payloadHashes?: T['payload_hashes'];
|
|
11
|
+
readonly payloadSchemas?: T['payload_schemas'];
|
|
12
|
+
readonly payloads?: TPayload[];
|
|
13
|
+
readonly sourceQuery?: Hash;
|
|
14
|
+
readonly timestamp?: boolean | number;
|
|
14
15
|
}
|
|
15
|
-
export declare class BoundWitnessBuilder<
|
|
16
|
-
schema:
|
|
17
|
-
}>
|
|
18
|
-
readonly config: BoundWitnessBuilderConfig;
|
|
19
|
-
protected readonly logger?: Logger | undefined;
|
|
16
|
+
export declare class BoundWitnessBuilder<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<Omit<T, GeneratedBoundWitnessFields>, BoundWitnessBuilderOptions<T> & {
|
|
17
|
+
schema: BoundWitnessSchema;
|
|
18
|
+
}> {
|
|
20
19
|
private static readonly _buildMutex;
|
|
21
20
|
private _accounts;
|
|
22
|
-
private
|
|
21
|
+
private _destination?;
|
|
22
|
+
private _errorHashes?;
|
|
23
23
|
private _errors;
|
|
24
|
-
private _payloadHashes
|
|
25
|
-
private _payloadSchemas
|
|
24
|
+
private _payloadHashes?;
|
|
25
|
+
private _payloadSchemas?;
|
|
26
26
|
private _payloads;
|
|
27
|
-
private _sourceQuery
|
|
27
|
+
private _sourceQuery?;
|
|
28
28
|
private _timestamp;
|
|
29
|
-
constructor(
|
|
29
|
+
constructor(options?: BoundWitnessBuilderOptions<T, TPayload>);
|
|
30
30
|
private get _payload_schemas();
|
|
31
31
|
static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
|
|
32
32
|
static previousHash<T extends BoundWitness>(payload: T, address: Address): string | null;
|
|
33
33
|
static signature<T extends BoundWitness>(payload: T, address: Address): string;
|
|
34
|
-
build(
|
|
34
|
+
build(): Promise<[WithMeta<T>, TPayload[], ModuleError[]]>;
|
|
35
35
|
error(payload?: ModuleError): Promise<this>;
|
|
36
36
|
errors(errors?: (ModuleError | null)[]): Promise<this>;
|
|
37
|
-
hashableFields(): Promise<
|
|
37
|
+
hashableFields(): Promise<T>;
|
|
38
38
|
hashes(hashes: Hash[], schema: Schema[]): this;
|
|
39
39
|
payload(payload?: TPayload): Promise<this>;
|
|
40
40
|
payloads(payloads?: (TPayload | null)[]): Promise<this>;
|
|
41
|
-
sourceQuery(
|
|
41
|
+
sourceQuery(query?: Hash): this;
|
|
42
42
|
witness(account: AccountInstance): this;
|
|
43
43
|
witnesses(accounts: AccountInstance[]): this;
|
|
44
44
|
protected signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | undefined)[]): Promise<string[]>;
|
|
45
45
|
private getPayloadHashes;
|
|
46
46
|
private missingSchemaMessage;
|
|
47
47
|
}
|
|
48
|
+
export {};
|
|
48
49
|
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -35,30 +35,33 @@ var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
|
35
35
|
var import_hash = require("@xyo-network/hash");
|
|
36
36
|
var import_payload = require("@xyo-network/payload");
|
|
37
37
|
var import_async_mutex = require("async-mutex");
|
|
38
|
-
var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
38
|
+
var BoundWitnessBuilder = class _BoundWitnessBuilder extends import_payload.PayloadBuilderBase {
|
|
39
39
|
static {
|
|
40
40
|
__name(this, "BoundWitnessBuilder");
|
|
41
41
|
}
|
|
42
|
-
config;
|
|
43
|
-
logger;
|
|
44
42
|
static _buildMutex = new import_async_mutex.Mutex();
|
|
45
43
|
_accounts;
|
|
44
|
+
_destination;
|
|
46
45
|
_errorHashes;
|
|
47
|
-
_errors;
|
|
46
|
+
_errors = [];
|
|
48
47
|
_payloadHashes;
|
|
49
48
|
_payloadSchemas;
|
|
50
49
|
_payloads;
|
|
51
50
|
_sourceQuery;
|
|
52
51
|
_timestamp;
|
|
53
|
-
constructor(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.
|
|
60
|
-
this.
|
|
61
|
-
this.
|
|
52
|
+
constructor(options) {
|
|
53
|
+
super({
|
|
54
|
+
...options,
|
|
55
|
+
schema: import_boundwitness_model.BoundWitnessSchema
|
|
56
|
+
});
|
|
57
|
+
const { accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination } = options ?? {};
|
|
58
|
+
this._accounts = accounts ?? [];
|
|
59
|
+
this._payloadHashes = payloadHashes;
|
|
60
|
+
this._payloadSchemas = payloadSchemas;
|
|
61
|
+
this._payloads = payloads ?? [];
|
|
62
|
+
this._sourceQuery = sourceQuery;
|
|
63
|
+
this._destination = destination;
|
|
64
|
+
this._timestamp = timestamp ?? true;
|
|
62
65
|
}
|
|
63
66
|
get _payload_schemas() {
|
|
64
67
|
return this._payloadSchemas ?? this._payloads.map((payload) => {
|
|
@@ -78,23 +81,28 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
78
81
|
static signature(payload, address) {
|
|
79
82
|
return payload.$meta.signatures[this.addressIndex(payload, address)];
|
|
80
83
|
}
|
|
81
|
-
async build(
|
|
82
|
-
if (meta) {
|
|
83
|
-
console.log("BoundWitnessBuilder: Calling build with meta=true will be disallowed soon");
|
|
84
|
-
}
|
|
84
|
+
async build() {
|
|
85
85
|
return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
|
|
86
86
|
const hashableFields = await this.hashableFields();
|
|
87
87
|
const hash = (await import_payload.PayloadBuilder.build(hashableFields)).$hash;
|
|
88
88
|
const previousHashes = this._accounts.map((account) => account.previousHash);
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
89
|
+
const metaHolder = {};
|
|
90
|
+
if (hashableFields.addresses.length > 0) {
|
|
91
|
+
metaHolder.$meta = metaHolder.$meta ?? {};
|
|
92
|
+
metaHolder.$meta.signatures = await this.signatures(hash, previousHashes);
|
|
93
|
+
}
|
|
94
|
+
if (this._sourceQuery) {
|
|
95
|
+
metaHolder.$meta = metaHolder.$meta ?? {};
|
|
96
|
+
metaHolder.$meta.sourceQuery = this._sourceQuery;
|
|
97
|
+
}
|
|
98
|
+
if (this._destination) {
|
|
99
|
+
metaHolder.$meta = metaHolder.$meta ?? {};
|
|
100
|
+
metaHolder.$meta.destination = this._destination;
|
|
101
|
+
}
|
|
94
102
|
const ret = {
|
|
95
103
|
...hashableFields,
|
|
96
104
|
$hash: hash,
|
|
97
|
-
...
|
|
105
|
+
...metaHolder
|
|
98
106
|
};
|
|
99
107
|
return [
|
|
100
108
|
ret,
|
|
@@ -122,27 +130,26 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
122
130
|
return this;
|
|
123
131
|
}
|
|
124
132
|
async hashableFields() {
|
|
125
|
-
const addresses = this._accounts.map((account) =>
|
|
133
|
+
const addresses = this._accounts.map((account) => (0, import_hex.hexFromArrayBuffer)(account.addressBytes, {
|
|
126
134
|
prefix: false
|
|
127
|
-
})
|
|
135
|
+
}));
|
|
128
136
|
const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
|
|
129
137
|
const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
|
|
130
138
|
const payload_schemas = (0, import_assert.assertEx)(this._payload_schemas, "Missing payload_schemas");
|
|
131
139
|
const result = {
|
|
132
|
-
|
|
140
|
+
...await super.hashableFields(),
|
|
141
|
+
addresses,
|
|
133
142
|
payload_hashes,
|
|
134
143
|
payload_schemas,
|
|
135
|
-
previous_hashes
|
|
136
|
-
schema: import_boundwitness_model.BoundWitnessSchema
|
|
144
|
+
previous_hashes
|
|
137
145
|
};
|
|
138
146
|
(0, import_assert.assertEx)(result.payload_hashes?.length === result.payload_schemas?.length, "Payload hash/schema mismatch");
|
|
139
147
|
(0, import_assert.assertEx)(!result.payload_hashes.some((hash) => !hash), () => "nulls found in hashes");
|
|
140
148
|
(0, import_assert.assertEx)(!result.payload_schemas.some((schema) => !schema), "nulls found in schemas");
|
|
141
|
-
if (this.
|
|
149
|
+
if (typeof this._timestamp === "number") {
|
|
142
150
|
result.timestamp = this._timestamp;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
result.sourceQuery = this._sourceQuery;
|
|
151
|
+
} else if (this._timestamp) {
|
|
152
|
+
result.timestamp = Date.now();
|
|
146
153
|
}
|
|
147
154
|
return result;
|
|
148
155
|
}
|
|
@@ -169,8 +176,8 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
|
169
176
|
}));
|
|
170
177
|
return this;
|
|
171
178
|
}
|
|
172
|
-
sourceQuery(
|
|
173
|
-
this._sourceQuery =
|
|
179
|
+
sourceQuery(query) {
|
|
180
|
+
this._sourceQuery = query;
|
|
174
181
|
return this;
|
|
175
182
|
}
|
|
176
183
|
witness(account) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { sortFields } from '@xyo-network/hash'\nimport { PayloadBuilder, PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload, Schema, WithMeta } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n 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 previousHash<T extends BoundWitness>(payload: T, address: Address) {\n return payload.previous_hashes[this.addressIndex(payload, address)]\n }\n\n static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n async build(meta = false): Promise<[WithMeta<TBoundWitness>, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const hash = (await PayloadBuilder.build(hashableFields)).$hash\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const meta =\n hashableFields.addresses.length > 0\n ? {\n $meta: {\n signatures: await this.signatures(hash, previousHashes),\n },\n }\n : {}\n\n const ret: WithMeta<TBoundWitness> = {\n ...hashableFields,\n $hash: hash,\n ...meta,\n }\n return [ret, this._payloads, this._errors]\n })\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 async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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(hash?: Hash) {\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: Hash, previousHashes: (Hash | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map(async (payload) => (await PayloadBuilder.build(payload)).$hash)))\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 hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n }\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","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 { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, 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\n static async parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): Promise<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 =\n castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.jsonPayload().query)).map((payload) => PayloadWrapper.wrap(payload))),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","_buildMutex","Mutex","_accounts","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","config","inlinePayloads","logger","Date","now","_payload_schemas","map","payload","assertEx","schema","missingSchemaMessage","addressIndex","address","index","addresses","indexOf","Error","previousHash","previous_hashes","signature","$meta","signatures","build","meta","console","log","runExclusive","hashableFields","hash","PayloadBuilder","$hash","previousHashes","account","length","ret","error","unwrappedPayload","PayloadWrapper","unwrap","undefined","push","sortFields","errors","Promise","all","addressBytes","hexFromArrayBuffer","prefix","payload_hashes","getPayloadHashes","payload_schemas","result","BoundWitnessSchema","some","timestamp","sourceQuery","hashes","payloads","witness","witnesses","accounts","_hash","toArrayBuffer","previousHashesBytes","ph","toUint8Array","sign","JSON","stringify","import_assert","import_boundwitness_model","import_payload","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","hashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","PayloadBuilder","build","payload","import_assert","import_payload","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","jsonPayload","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { Address, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { JsonObject } from '@xylabs/object'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { 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\ntype GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<T, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: string[]\n readonly payloadHashes?: T['payload_hashes']\n readonly payloadSchemas?: T['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: boolean | number\n}\n\nexport class BoundWitnessBuilder<T extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<T, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<T> & { 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<T, 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 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 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 previousHash<T extends BoundWitness>(payload: T, address: Address) {\n return payload.previous_hashes[this.addressIndex(payload, address)]\n }\n\n static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n async build(): Promise<[WithMeta<T>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const hash = (await PayloadBuilder.build(hashableFields)).$hash\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const metaHolder: { $meta?: JsonObject } = {}\n\n if (hashableFields.addresses.length > 0) {\n metaHolder.$meta = metaHolder.$meta ?? {}\n metaHolder.$meta.signatures = await this.signatures(hash, previousHashes)\n }\n\n if (this._sourceQuery) {\n metaHolder.$meta = metaHolder.$meta ?? {}\n metaHolder.$meta.sourceQuery = this._sourceQuery\n }\n\n if (this._destination) {\n metaHolder.$meta = metaHolder.$meta ?? {}\n metaHolder.$meta.destination = this._destination\n }\n\n const ret: WithMeta<T> = {\n ...hashableFields,\n $hash: hash,\n ...metaHolder,\n }\n return [ret, this._payloads, this._errors]\n })\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 override async hashableFields(): Promise<T> {\n const addresses = this._accounts.map((account) => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\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: T = {\n ...(await super.hashableFields()),\n addresses,\n payload_hashes,\n payload_schemas,\n previous_hashes,\n } as T\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (typeof this._timestamp === 'number') {\n result.timestamp = this._timestamp\n } else if (this._timestamp) {\n result.timestamp = Date.now()\n }\n\n return result\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\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: Hash, previousHashes: (Hash | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map(async (payload) => (await PayloadBuilder.build(payload)).$hash)))\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 hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(this._query, 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n }\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","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 { PayloadBuilder } from '@xyo-network/payload'\nimport { Payload, 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\n static async parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): Promise<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 =\n castWrapper instanceof QueryBoundWitnessWrapper\n ? castWrapper\n : new QueryBoundWitnessWrapper<T>(\n await PayloadBuilder.build(obj as QueryBoundWitness),\n payloads ? await Promise.all(payloads.map((payload) => PayloadBuilder.build(payload))) : undefined,\n )\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getPayloadsWithoutQuery(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n (await Promise.all(\n compact((await PayloadBuilder.filterExclude(this.payloads, this.jsonPayload().query)).map((payload) => PayloadWrapper.wrap(payload))),\n ))\n return this._payloadsWithoutQuery\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.payloadsDataHashMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, () => `Missing Query [${this.boundwitness}]`)\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","_payload_schemas","map","payload","assertEx","missingSchemaMessage","addressIndex","address","index","addresses","indexOf","Error","previousHash","previous_hashes","signature","$meta","signatures","build","runExclusive","hashableFields","hash","PayloadBuilder","$hash","previousHashes","account","metaHolder","length","ret","error","unwrappedPayload","PayloadWrapper","unwrap","undefined","push","sortFields","errors","Promise","all","hexFromArrayBuffer","addressBytes","prefix","payload_hashes","getPayloadHashes","payload_schemas","result","some","Date","now","hashes","query","witness","witnesses","_hash","toArrayBuffer","previousHashesBytes","ph","toUint8Array","sign","JSON","stringify","import_assert","import_boundwitness_model","import_payload","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","hashableFields","query","assertEx","$hash","schema","QueryBoundWitnessSchema","PayloadBuilder","build","payload","import_assert","import_payload","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","PayloadBuilder","build","Promise","all","map","payload","undefined","Error","getPayloadsWithoutQuery","compact","filterExclude","jsonPayload","query","PayloadWrapper","wrap","getQuery","payloadMap","payloadsDataHashMap","boundwitness"]}
|