@xyo-network/boundwitness-builder 2.75.0 → 2.75.1
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 +41 -0
- package/dist/browser/Builder.d.cts.map +1 -0
- package/dist/browser/Builder.js +3 -4
- package/dist/browser/Builder.js.map +1 -1
- package/dist/browser/Query/QueryBoundWitness.d.cts +17 -0
- package/dist/browser/Query/QueryBoundWitness.d.cts.map +1 -0
- package/dist/browser/Query/QueryBoundWitness.js +2 -3
- package/dist/browser/Query/QueryBoundWitness.js.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.cts +11 -0
- package/dist/browser/Query/QueryBoundWitnessBuilder.d.cts.map +1 -0
- package/dist/browser/Query/QueryBoundWitnessBuilder.js +8 -150
- package/dist/browser/Query/QueryBoundWitnessBuilder.js.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessValidator.d.cts +11 -0
- package/dist/browser/Query/QueryBoundWitnessValidator.d.cts.map +1 -0
- package/dist/browser/Query/QueryBoundWitnessValidator.js +4 -10
- package/dist/browser/Query/QueryBoundWitnessValidator.js.map +1 -1
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.cts +18 -0
- package/dist/browser/Query/QueryBoundWitnessWrapper.d.cts.map +1 -0
- package/dist/browser/Query/QueryBoundWitnessWrapper.js +10 -64
- package/dist/browser/Query/QueryBoundWitnessWrapper.js.map +1 -1
- package/dist/browser/Query/index.d.cts +5 -0
- package/dist/browser/Query/index.d.cts.map +1 -0
- package/dist/browser/Query/index.js +4 -270
- package/dist/browser/Query/index.js.map +1 -1
- package/dist/browser/index.d.cts +3 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.js +2 -269
- package/dist/browser/index.js.map +1 -1
- package/dist/docs.json +18622 -0
- package/dist/node/Builder.d.cts +41 -0
- package/dist/node/Builder.d.cts.map +1 -0
- package/dist/node/Builder.js +15 -9
- package/dist/node/Builder.js.map +1 -1
- package/dist/node/Builder.mjs +14 -9
- package/dist/node/Builder.mjs.map +1 -1
- package/dist/node/Query/QueryBoundWitness.d.cts +17 -0
- package/dist/node/Query/QueryBoundWitness.d.cts.map +1 -0
- package/dist/node/Query/QueryBoundWitness.js +4 -2
- package/dist/node/Query/QueryBoundWitness.js.map +1 -1
- package/dist/node/Query/QueryBoundWitness.mjs +3 -2
- package/dist/node/Query/QueryBoundWitness.mjs.map +1 -1
- package/dist/node/Query/QueryBoundWitnessBuilder.d.cts +11 -0
- package/dist/node/Query/QueryBoundWitnessBuilder.d.cts.map +1 -0
- package/dist/node/Query/QueryBoundWitnessBuilder.js +155 -7
- package/dist/node/Query/QueryBoundWitnessBuilder.js.map +1 -1
- package/dist/node/Query/QueryBoundWitnessBuilder.mjs +155 -8
- package/dist/node/Query/QueryBoundWitnessBuilder.mjs.map +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.d.cts +11 -0
- package/dist/node/Query/QueryBoundWitnessValidator.d.cts.map +1 -0
- package/dist/node/Query/QueryBoundWitnessValidator.js +13 -6
- package/dist/node/Query/QueryBoundWitnessValidator.js.map +1 -1
- package/dist/node/Query/QueryBoundWitnessValidator.mjs +11 -5
- package/dist/node/Query/QueryBoundWitnessValidator.mjs.map +1 -1
- package/dist/node/Query/QueryBoundWitnessWrapper.d.cts +18 -0
- package/dist/node/Query/QueryBoundWitnessWrapper.d.cts.map +1 -0
- package/dist/node/Query/QueryBoundWitnessWrapper.js +66 -11
- package/dist/node/Query/QueryBoundWitnessWrapper.js.map +1 -1
- package/dist/node/Query/QueryBoundWitnessWrapper.mjs +64 -10
- package/dist/node/Query/QueryBoundWitnessWrapper.mjs.map +1 -1
- package/dist/node/Query/index.d.cts +5 -0
- package/dist/node/Query/index.d.cts.map +1 -0
- package/dist/node/Query/index.js +287 -9
- package/dist/node/Query/index.js.map +1 -1
- package/dist/node/Query/index.mjs +275 -4
- package/dist/node/Query/index.mjs.map +1 -1
- package/dist/node/index.d.cts +3 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.js +287 -5
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +274 -2
- package/dist/node/index.mjs.map +1 -1
- package/package.json +17 -17
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
2
|
+
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
+
import { Data } from '@xyo-network/core';
|
|
4
|
+
import { ModuleError, Payload } from '@xyo-network/payload-model';
|
|
5
|
+
import { Logger } from '@xyo-network/shared';
|
|
6
|
+
export interface BoundWitnessBuilderConfig {
|
|
7
|
+
/** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */
|
|
8
|
+
readonly inlinePayloads?: boolean;
|
|
9
|
+
readonly meta?: boolean;
|
|
10
|
+
readonly timestamp?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{
|
|
13
|
+
schema: string;
|
|
14
|
+
}> = BoundWitness, TPayload extends Payload = Payload> {
|
|
15
|
+
readonly config: BoundWitnessBuilderConfig;
|
|
16
|
+
protected readonly logger?: Logger | undefined;
|
|
17
|
+
private static readonly _buildMutex;
|
|
18
|
+
private _accounts;
|
|
19
|
+
private _errorHashes;
|
|
20
|
+
private _errors;
|
|
21
|
+
private _payloadHashes;
|
|
22
|
+
private _payloadSchemas;
|
|
23
|
+
private _payloads;
|
|
24
|
+
private _timestamp;
|
|
25
|
+
constructor(config?: BoundWitnessBuilderConfig, logger?: Logger | undefined);
|
|
26
|
+
private get _payload_schemas();
|
|
27
|
+
build(meta?: boolean): Promise<[TBoundWitness, TPayload[], ModuleError[]]>;
|
|
28
|
+
error(payload?: ModuleError): this;
|
|
29
|
+
errors(errors?: (ModuleError | null)[]): this;
|
|
30
|
+
hashableFields(): Promise<TBoundWitness>;
|
|
31
|
+
hashes(hashes: string[], schema: string[]): this;
|
|
32
|
+
payload(payload?: TPayload): this;
|
|
33
|
+
payloads(payloads?: (TPayload | null)[]): this;
|
|
34
|
+
witness(account: AccountInstance): this;
|
|
35
|
+
witnesses(accounts: AccountInstance[]): this;
|
|
36
|
+
protected signatures(_hash: string, previousHashes: (string | Data | undefined)[]): Promise<string[]>;
|
|
37
|
+
private getPayloadHashes;
|
|
38
|
+
private inlinePayloads;
|
|
39
|
+
private missingSchemaMessage;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,IAAI,EAA6B,MAAM,mBAAmB,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,MAAM,WAAW,yBAAyB;IACxC,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,qBAAa,mBAAmB,CAAC,aAAa,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,EAAE,QAAQ,SAAS,OAAO,GAAG,OAAO;IAWtI,QAAQ,CAAC,MAAM,EAAE,yBAAyB;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAX5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAc;IACjD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,UAAU,CAAa;gBAGpB,MAAM,GAAE,yBAAqD,EACnD,MAAM,CAAC,oBAAQ;IAGpC,OAAO,KAAK,gBAAgB,GAO3B;IAEK,KAAK,CAAC,IAAI,UAAQ,GAAG,OAAO,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IA6B9E,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW;IAS3B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE;IAShC,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IA0B9C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAOzC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ;IAS1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;IASvC,OAAO,CAAC,OAAO,EAAE,eAAe;IAKhC,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE;cAKrB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE;YAOzE,gBAAgB;IAI9B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,oBAAoB;CAG7B"}
|
package/dist/node/Builder.js
CHANGED
|
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/Builder.ts
|
|
19
21
|
var Builder_exports = {};
|
|
20
22
|
__export(Builder_exports, {
|
|
21
23
|
BoundWitnessBuilder: () => BoundWitnessBuilder
|
|
@@ -28,7 +30,7 @@ var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
|
|
|
28
30
|
var import_core = require("@xyo-network/core");
|
|
29
31
|
var import_payload = require("@xyo-network/payload");
|
|
30
32
|
var import_async_mutex = require("async-mutex");
|
|
31
|
-
|
|
33
|
+
var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
32
34
|
constructor(config = { inlinePayloads: false }, logger) {
|
|
33
35
|
this.config = config;
|
|
34
36
|
this.logger = logger;
|
|
@@ -47,7 +49,8 @@ class BoundWitnessBuilder {
|
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
async build(meta = false) {
|
|
50
|
-
return await
|
|
52
|
+
return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
|
|
53
|
+
var _a;
|
|
51
54
|
const hashableFields = await this.hashableFields();
|
|
52
55
|
const _hash = await import_boundwitness_wrapper.BoundWitnessWrapper.hashAsync(hashableFields);
|
|
53
56
|
const previousHashes = this._accounts.map((account) => account.previousHash);
|
|
@@ -55,7 +58,7 @@ class BoundWitnessBuilder {
|
|
|
55
58
|
...hashableFields,
|
|
56
59
|
_signatures: await this.signatures(_hash, previousHashes)
|
|
57
60
|
};
|
|
58
|
-
if (meta ?? this.config
|
|
61
|
+
if (meta ?? ((_a = this.config) == null ? void 0 : _a.meta)) {
|
|
59
62
|
const bwWithMeta = ret;
|
|
60
63
|
bwWithMeta._client = "js";
|
|
61
64
|
bwWithMeta._hash = _hash;
|
|
@@ -77,7 +80,7 @@ class BoundWitnessBuilder {
|
|
|
77
80
|
return this;
|
|
78
81
|
}
|
|
79
82
|
errors(errors) {
|
|
80
|
-
errors
|
|
83
|
+
errors == null ? void 0 : errors.forEach((error) => {
|
|
81
84
|
if (error !== null) {
|
|
82
85
|
this.error(error);
|
|
83
86
|
}
|
|
@@ -85,6 +88,7 @@ class BoundWitnessBuilder {
|
|
|
85
88
|
return this;
|
|
86
89
|
}
|
|
87
90
|
async hashableFields() {
|
|
91
|
+
var _a, _b;
|
|
88
92
|
const addresses = this._accounts.map((account) => account.address);
|
|
89
93
|
const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
|
|
90
94
|
const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
|
|
@@ -96,7 +100,7 @@ class BoundWitnessBuilder {
|
|
|
96
100
|
previous_hashes,
|
|
97
101
|
schema: import_boundwitness_model.BoundWitnessSchema
|
|
98
102
|
};
|
|
99
|
-
(0, import_assert.assertEx)(result.payload_hashes
|
|
103
|
+
(0, import_assert.assertEx)(((_a = result.payload_hashes) == null ? void 0 : _a.length) === ((_b = result.payload_schemas) == null ? void 0 : _b.length), "Payload hash/schema mismatch");
|
|
100
104
|
(0, import_assert.assertEx)(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
|
|
101
105
|
(0, import_assert.assertEx)(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
|
|
102
106
|
if (this.config.timestamp ?? true) {
|
|
@@ -119,7 +123,7 @@ class BoundWitnessBuilder {
|
|
|
119
123
|
return this;
|
|
120
124
|
}
|
|
121
125
|
payloads(payloads) {
|
|
122
|
-
payloads
|
|
126
|
+
payloads == null ? void 0 : payloads.forEach((payload) => {
|
|
123
127
|
if (payload !== null) {
|
|
124
128
|
this.payload(payload);
|
|
125
129
|
}
|
|
@@ -127,11 +131,13 @@ class BoundWitnessBuilder {
|
|
|
127
131
|
return this;
|
|
128
132
|
}
|
|
129
133
|
witness(account) {
|
|
130
|
-
|
|
134
|
+
var _a;
|
|
135
|
+
(_a = this._accounts) == null ? void 0 : _a.push(account);
|
|
131
136
|
return this;
|
|
132
137
|
}
|
|
133
138
|
witnesses(accounts) {
|
|
134
|
-
|
|
139
|
+
var _a;
|
|
140
|
+
(_a = this._accounts) == null ? void 0 : _a.push(...accounts);
|
|
135
141
|
return this;
|
|
136
142
|
}
|
|
137
143
|
async signatures(_hash, previousHashes) {
|
|
@@ -155,7 +161,7 @@ class BoundWitnessBuilder {
|
|
|
155
161
|
return `Builder: Missing Schema
|
|
156
162
|
${JSON.stringify(payload, null, 2)}`;
|
|
157
163
|
}
|
|
158
|
-
}
|
|
164
|
+
};
|
|
159
165
|
// Annotate the CommonJS export names for ESM import in node:
|
|
160
166
|
0 && (module.exports = {
|
|
161
167
|
BoundWitnessBuilder
|
package/dist/node/Builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/node/Builder.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// src/Builder.ts
|
|
1
2
|
import { assertEx } from "@xylabs/assert";
|
|
2
3
|
import { Buffer } from "@xylabs/buffer";
|
|
3
4
|
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
@@ -5,7 +6,7 @@ import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
|
5
6
|
import { PayloadHasher, sortFields } from "@xyo-network/core";
|
|
6
7
|
import { PayloadWrapper } from "@xyo-network/payload";
|
|
7
8
|
import { Mutex } from "async-mutex";
|
|
8
|
-
|
|
9
|
+
var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
9
10
|
constructor(config = { inlinePayloads: false }, logger) {
|
|
10
11
|
this.config = config;
|
|
11
12
|
this.logger = logger;
|
|
@@ -24,7 +25,8 @@ class BoundWitnessBuilder {
|
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
async build(meta = false) {
|
|
27
|
-
return await
|
|
28
|
+
return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
|
|
29
|
+
var _a;
|
|
28
30
|
const hashableFields = await this.hashableFields();
|
|
29
31
|
const _hash = await BoundWitnessWrapper.hashAsync(hashableFields);
|
|
30
32
|
const previousHashes = this._accounts.map((account) => account.previousHash);
|
|
@@ -32,7 +34,7 @@ class BoundWitnessBuilder {
|
|
|
32
34
|
...hashableFields,
|
|
33
35
|
_signatures: await this.signatures(_hash, previousHashes)
|
|
34
36
|
};
|
|
35
|
-
if (meta ?? this.config
|
|
37
|
+
if (meta ?? ((_a = this.config) == null ? void 0 : _a.meta)) {
|
|
36
38
|
const bwWithMeta = ret;
|
|
37
39
|
bwWithMeta._client = "js";
|
|
38
40
|
bwWithMeta._hash = _hash;
|
|
@@ -54,7 +56,7 @@ class BoundWitnessBuilder {
|
|
|
54
56
|
return this;
|
|
55
57
|
}
|
|
56
58
|
errors(errors) {
|
|
57
|
-
errors
|
|
59
|
+
errors == null ? void 0 : errors.forEach((error) => {
|
|
58
60
|
if (error !== null) {
|
|
59
61
|
this.error(error);
|
|
60
62
|
}
|
|
@@ -62,6 +64,7 @@ class BoundWitnessBuilder {
|
|
|
62
64
|
return this;
|
|
63
65
|
}
|
|
64
66
|
async hashableFields() {
|
|
67
|
+
var _a, _b;
|
|
65
68
|
const addresses = this._accounts.map((account) => account.address);
|
|
66
69
|
const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
|
|
67
70
|
const payload_hashes = assertEx(await this.getPayloadHashes(), "Missing payload_hashes");
|
|
@@ -73,7 +76,7 @@ class BoundWitnessBuilder {
|
|
|
73
76
|
previous_hashes,
|
|
74
77
|
schema: BoundWitnessSchema
|
|
75
78
|
};
|
|
76
|
-
assertEx(result.payload_hashes
|
|
79
|
+
assertEx(((_a = result.payload_hashes) == null ? void 0 : _a.length) === ((_b = result.payload_schemas) == null ? void 0 : _b.length), "Payload hash/schema mismatch");
|
|
77
80
|
assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
|
|
78
81
|
assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
|
|
79
82
|
if (this.config.timestamp ?? true) {
|
|
@@ -96,7 +99,7 @@ class BoundWitnessBuilder {
|
|
|
96
99
|
return this;
|
|
97
100
|
}
|
|
98
101
|
payloads(payloads) {
|
|
99
|
-
payloads
|
|
102
|
+
payloads == null ? void 0 : payloads.forEach((payload) => {
|
|
100
103
|
if (payload !== null) {
|
|
101
104
|
this.payload(payload);
|
|
102
105
|
}
|
|
@@ -104,11 +107,13 @@ class BoundWitnessBuilder {
|
|
|
104
107
|
return this;
|
|
105
108
|
}
|
|
106
109
|
witness(account) {
|
|
107
|
-
|
|
110
|
+
var _a;
|
|
111
|
+
(_a = this._accounts) == null ? void 0 : _a.push(account);
|
|
108
112
|
return this;
|
|
109
113
|
}
|
|
110
114
|
witnesses(accounts) {
|
|
111
|
-
|
|
115
|
+
var _a;
|
|
116
|
+
(_a = this._accounts) == null ? void 0 : _a.push(...accounts);
|
|
112
117
|
return this;
|
|
113
118
|
}
|
|
114
119
|
async signatures(_hash, previousHashes) {
|
|
@@ -132,7 +137,7 @@ class BoundWitnessBuilder {
|
|
|
132
137
|
return `Builder: Missing Schema
|
|
133
138
|
${JSON.stringify(payload, null, 2)}`;
|
|
134
139
|
}
|
|
135
|
-
}
|
|
140
|
+
};
|
|
136
141
|
export {
|
|
137
142
|
BoundWitnessBuilder
|
|
138
143
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Builder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,SAAuB,0BAA0B;AACjD,SAAS,2BAA2B;AACpC,SAAe,eAAe,kBAAkB;AAChD,SAAS,sBAAsB;AAG/B,SAAS,aAAa;AASf,MAAM,
|
|
1
|
+
{"version":3,"sources":["../../src/Builder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model';
|
|
2
|
+
import { Payload } from '@xyo-network/payload-model';
|
|
3
|
+
export type QueryBoundWitnessSchema = BoundWitnessSchema;
|
|
4
|
+
export declare const QueryBoundWitnessSchema: QueryBoundWitnessSchema;
|
|
5
|
+
export type QueryBoundWitness = BoundWitness<{
|
|
6
|
+
query: string;
|
|
7
|
+
resultSet?: string;
|
|
8
|
+
schema: BoundWitnessSchema;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const isQueryBoundWitness: (x?: Payload | null) => x is import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/boundwitness-model").BoundWitnessFields & {
|
|
11
|
+
query: string;
|
|
12
|
+
resultSet?: string | undefined;
|
|
13
|
+
schema: BoundWitnessSchema;
|
|
14
|
+
}, "schema"> & {
|
|
15
|
+
schema: "network.xyo.boundwitness";
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=QueryBoundWitness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBoundWitness.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAkB,MAAM,iCAAiC,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,MAAM,MAAM,uBAAuB,GAAG,kBAAkB,CAAA;AACxD,eAAO,MAAM,uBAAuB,EAAE,uBAA4C,CAAA;AAElF,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,kBAAkB,CAAA;CAC3B,CAAC,CAAA;AAEF,eAAO,MAAM,mBAAmB,OAAQ,OAAO,GAAG,IAAI;WAL7C,MAAM;;YAEL,kBAAkB;;;CAGyH,CAAA"}
|
|
@@ -16,6 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/Query/QueryBoundWitness.ts
|
|
19
21
|
var QueryBoundWitness_exports = {};
|
|
20
22
|
__export(QueryBoundWitness_exports, {
|
|
21
23
|
QueryBoundWitnessSchema: () => QueryBoundWitnessSchema,
|
|
@@ -23,8 +25,8 @@ __export(QueryBoundWitness_exports, {
|
|
|
23
25
|
});
|
|
24
26
|
module.exports = __toCommonJS(QueryBoundWitness_exports);
|
|
25
27
|
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
var QueryBoundWitnessSchema = import_boundwitness_model.BoundWitnessSchema;
|
|
29
|
+
var isQueryBoundWitness = (x) => (0, import_boundwitness_model.isBoundWitness)(x) && (x == null ? void 0 : x.query) !== void 0;
|
|
28
30
|
// Annotate the CommonJS export names for ESM import in node:
|
|
29
31
|
0 && (module.exports = {
|
|
30
32
|
QueryBoundWitnessSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAiE;AAI1D,IAAM,0BAAmD;AAQzD,IAAM,sBAAsB,CAAC,UAA+C,0CAAe,CAAC,MAAM,uBAAyB,WAAU;","names":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
// src/Query/QueryBoundWitness.ts
|
|
1
2
|
import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-model";
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
var QueryBoundWitnessSchema = BoundWitnessSchema;
|
|
4
|
+
var isQueryBoundWitness = (x) => isBoundWitness(x) && (x == null ? void 0 : x.query) !== void 0;
|
|
4
5
|
export {
|
|
5
6
|
QueryBoundWitnessSchema,
|
|
6
7
|
isQueryBoundWitness
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":"AAAA,SAAuB,oBAAoB,sBAAsB;AAI1D,
|
|
1
|
+
{"version":3,"sources":["../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":";AAAA,SAAuB,oBAAoB,sBAAsB;AAI1D,IAAM,0BAAmD;AAQzD,IAAM,sBAAsB,CAAC,MAA+C,eAAe,CAAC,MAAM,uBAAyB,WAAU;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PayloadSetPayload, Query } from '@xyo-network/payload-model';
|
|
2
|
+
import { BoundWitnessBuilder } from '../Builder';
|
|
3
|
+
import { QueryBoundWitness } from './QueryBoundWitness';
|
|
4
|
+
export declare class QueryBoundWitnessBuilder<TBoundWitness extends QueryBoundWitness = QueryBoundWitness, TQuery extends Query = Query> extends BoundWitnessBuilder<TBoundWitness> {
|
|
5
|
+
private _query;
|
|
6
|
+
private _resultSet;
|
|
7
|
+
hashableFields(): Promise<TBoundWitness>;
|
|
8
|
+
query<T extends TQuery>(query: T): this;
|
|
9
|
+
resultSet<T extends PayloadSetPayload>(payloadSet: T): this;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=QueryBoundWitnessBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBoundWitnessBuilder.d.ts","sourceRoot":"","sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAA;AAEhF,qBAAa,wBAAwB,CACnC,aAAa,SAAS,iBAAiB,GAAG,iBAAiB,EAC3D,MAAM,SAAS,KAAK,GAAG,KAAK,CAC5B,SAAQ,mBAAmB,CAAC,aAAa,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,UAAU,CAA+C;IAElD,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IAQvD,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC;IAMhC,SAAS,CAAC,CAAC,SAAS,iBAAiB,EAAE,UAAU,EAAE,CAAC;CAKrD"}
|
|
@@ -16,23 +16,171 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/Query/QueryBoundWitnessBuilder.ts
|
|
19
21
|
var QueryBoundWitnessBuilder_exports = {};
|
|
20
22
|
__export(QueryBoundWitnessBuilder_exports, {
|
|
21
23
|
QueryBoundWitnessBuilder: () => QueryBoundWitnessBuilder
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(QueryBoundWitnessBuilder_exports);
|
|
24
|
-
var
|
|
26
|
+
var import_assert2 = require("@xylabs/assert");
|
|
25
27
|
var import_payload_wrapper = require("@xyo-network/payload-wrapper");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
// src/Builder.ts
|
|
30
|
+
var import_assert = require("@xylabs/assert");
|
|
31
|
+
var import_buffer = require("@xylabs/buffer");
|
|
32
|
+
var import_boundwitness_model = require("@xyo-network/boundwitness-model");
|
|
33
|
+
var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
|
|
34
|
+
var import_core = require("@xyo-network/core");
|
|
35
|
+
var import_payload = require("@xyo-network/payload");
|
|
36
|
+
var import_async_mutex = require("async-mutex");
|
|
37
|
+
var BoundWitnessBuilder = class _BoundWitnessBuilder {
|
|
38
|
+
constructor(config = { inlinePayloads: false }, logger) {
|
|
39
|
+
this.config = config;
|
|
40
|
+
this.logger = logger;
|
|
41
|
+
}
|
|
42
|
+
static _buildMutex = new import_async_mutex.Mutex();
|
|
43
|
+
_accounts = [];
|
|
44
|
+
_errorHashes;
|
|
45
|
+
_errors = [];
|
|
46
|
+
_payloadHashes;
|
|
47
|
+
_payloadSchemas;
|
|
48
|
+
_payloads = [];
|
|
49
|
+
_timestamp = Date.now();
|
|
50
|
+
get _payload_schemas() {
|
|
51
|
+
return this._payloadSchemas ?? this._payloads.map((payload) => {
|
|
52
|
+
return (0, import_assert.assertEx)(payload.schema, () => this.missingSchemaMessage(payload));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async build(meta = false) {
|
|
56
|
+
return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
|
|
57
|
+
var _a;
|
|
58
|
+
const hashableFields = await this.hashableFields();
|
|
59
|
+
const _hash = await import_boundwitness_wrapper.BoundWitnessWrapper.hashAsync(hashableFields);
|
|
60
|
+
const previousHashes = this._accounts.map((account) => account.previousHash);
|
|
61
|
+
const ret = {
|
|
62
|
+
...hashableFields,
|
|
63
|
+
_signatures: await this.signatures(_hash, previousHashes)
|
|
64
|
+
};
|
|
65
|
+
if (meta ?? ((_a = this.config) == null ? void 0 : _a.meta)) {
|
|
66
|
+
const bwWithMeta = ret;
|
|
67
|
+
bwWithMeta._client = "js";
|
|
68
|
+
bwWithMeta._hash = _hash;
|
|
69
|
+
bwWithMeta._timestamp = this._timestamp;
|
|
70
|
+
}
|
|
71
|
+
if (this.config.inlinePayloads) {
|
|
72
|
+
const anyRet = ret;
|
|
73
|
+
anyRet._payloads = this.inlinePayloads();
|
|
74
|
+
}
|
|
75
|
+
return [ret, this._payloads, this._errors];
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
error(payload) {
|
|
79
|
+
const unwrappedPayload = import_payload.PayloadWrapper.unwrap(payload);
|
|
80
|
+
(0, import_assert.assertEx)(this._errorHashes === void 0, "Can not set errors when hashes already set");
|
|
81
|
+
if (unwrappedPayload) {
|
|
82
|
+
this._errors.push((0, import_assert.assertEx)((0, import_core.sortFields)(unwrappedPayload)));
|
|
83
|
+
}
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
errors(errors) {
|
|
87
|
+
errors == null ? void 0 : errors.forEach((error) => {
|
|
88
|
+
if (error !== null) {
|
|
89
|
+
this.error(error);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
async hashableFields() {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
const addresses = this._accounts.map((account) => account.address);
|
|
97
|
+
const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
|
|
98
|
+
const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
|
|
99
|
+
const payload_schemas = (0, import_assert.assertEx)(this._payload_schemas, "Missing payload_schemas");
|
|
100
|
+
const result = {
|
|
101
|
+
addresses: (0, import_assert.assertEx)(addresses, "Missing addresses"),
|
|
102
|
+
payload_hashes,
|
|
103
|
+
payload_schemas,
|
|
104
|
+
previous_hashes,
|
|
105
|
+
schema: import_boundwitness_model.BoundWitnessSchema
|
|
106
|
+
};
|
|
107
|
+
(0, import_assert.assertEx)(((_a = result.payload_hashes) == null ? void 0 : _a.length) === ((_b = result.payload_schemas) == null ? void 0 : _b.length), "Payload hash/schema mismatch");
|
|
108
|
+
(0, import_assert.assertEx)(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
|
|
109
|
+
(0, import_assert.assertEx)(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
|
|
110
|
+
if (this.config.timestamp ?? true) {
|
|
111
|
+
result.timestamp = this._timestamp;
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
hashes(hashes, schema) {
|
|
116
|
+
(0, import_assert.assertEx)(this.payloads.length === 0, "Can not set hashes when payloads already set");
|
|
117
|
+
this._payloadHashes = hashes;
|
|
118
|
+
this._payloadSchemas = schema;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
payload(payload) {
|
|
122
|
+
const unwrappedPayload = import_payload.PayloadWrapper.unwrap(payload);
|
|
123
|
+
(0, import_assert.assertEx)(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
|
|
124
|
+
if (unwrappedPayload) {
|
|
125
|
+
this._payloads.push((0, import_assert.assertEx)((0, import_core.sortFields)(unwrappedPayload)));
|
|
126
|
+
}
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
payloads(payloads) {
|
|
130
|
+
payloads == null ? void 0 : payloads.forEach((payload) => {
|
|
131
|
+
if (payload !== null) {
|
|
132
|
+
this.payload(payload);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
witness(account) {
|
|
138
|
+
var _a;
|
|
139
|
+
(_a = this._accounts) == null ? void 0 : _a.push(account);
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
witnesses(accounts) {
|
|
143
|
+
var _a;
|
|
144
|
+
(_a = this._accounts) == null ? void 0 : _a.push(...accounts);
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
async signatures(_hash, previousHashes) {
|
|
148
|
+
const hash = import_buffer.Buffer.from(_hash, "hex");
|
|
149
|
+
return await Promise.all(
|
|
150
|
+
this._accounts.map(async (account, index) => import_buffer.Buffer.from(await account.sign(hash, previousHashes[index])).toString("hex"))
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
async getPayloadHashes() {
|
|
154
|
+
return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) => import_core.PayloadHasher.hashAsync(payload)));
|
|
155
|
+
}
|
|
156
|
+
inlinePayloads() {
|
|
157
|
+
return this._payloads.map((payload, index) => {
|
|
158
|
+
return {
|
|
159
|
+
...payload,
|
|
160
|
+
schema: this._payload_schemas[index]
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
missingSchemaMessage(payload) {
|
|
165
|
+
return `Builder: Missing Schema
|
|
166
|
+
${JSON.stringify(payload, null, 2)}`;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// src/Query/QueryBoundWitness.ts
|
|
171
|
+
var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
|
|
172
|
+
var QueryBoundWitnessSchema = import_boundwitness_model2.BoundWitnessSchema;
|
|
173
|
+
|
|
174
|
+
// src/Query/QueryBoundWitnessBuilder.ts
|
|
175
|
+
var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
|
|
29
176
|
_query;
|
|
30
177
|
_resultSet;
|
|
31
178
|
async hashableFields() {
|
|
179
|
+
var _a;
|
|
32
180
|
return {
|
|
33
181
|
...await super.hashableFields(),
|
|
34
|
-
query: (0,
|
|
35
|
-
schema:
|
|
182
|
+
query: (0, import_assert2.assertEx)(await ((_a = this._query) == null ? void 0 : _a.hashAsync()), "No Query Specified"),
|
|
183
|
+
schema: QueryBoundWitnessSchema
|
|
36
184
|
};
|
|
37
185
|
}
|
|
38
186
|
query(query) {
|
|
@@ -45,7 +193,7 @@ class QueryBoundWitnessBuilder extends import_Builder.BoundWitnessBuilder {
|
|
|
45
193
|
this.payload(this._resultSet.payload());
|
|
46
194
|
return this;
|
|
47
195
|
}
|
|
48
|
-
}
|
|
196
|
+
};
|
|
49
197
|
// Annotate the CommonJS export names for ESM import in node:
|
|
50
198
|
0 && (module.exports = {
|
|
51
199
|
QueryBoundWitnessBuilder
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n\n resultSet<T extends PayloadSetPayload>(payloadSet: T) {\n this._resultSet = PayloadWrapper.wrap(payloadSet)\n this.payload(this._resultSet.payload())\n return this\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyB;AAEzB,6BAA+B;AAE/B,qBAAoC;AACpC,+BAA2D;AAEpD,MAAM,iCAGH,mCAAmC;AAAA,EACnC;AAAA,EACA;AAAA,EAER,MAAe,iBAAyC;AACtD,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,eAAe;AAAA,MAC/B,WAAO,wBAAS,MAAM,KAAK,QAAQ,UAAU,GAAG,oBAAoB;AAAA,MACpE,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAwB,OAAU;AAChC,SAAK,SAAS,sCAAe,KAAK,KAAK;AACvC,SAAK,QAAQ,KAAK,OAAO,QAAQ,CAAC;AAClC,WAAO;AAAA,EACT;AAAA,EAEA,UAAuC,YAAe;AACpD,SAAK,aAAa,sCAAe,KAAK,UAAU;AAChD,SAAK,QAAQ,KAAK,WAAW,QAAQ,CAAC;AACtC,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/Query/QueryBoundWitnessBuilder.ts","../../../src/Builder.ts","../../../src/Query/QueryBoundWitness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from './QueryBoundWitness'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n private _resultSet: PayloadWrapper<PayloadSetPayload> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n\n resultSet<T extends PayloadSetPayload>(payloadSet: T) {\n this._resultSet = PayloadWrapper.wrap(payloadSet)\n this.payload(this._resultSet.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Buffer } from '@xylabs/buffer'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { Data, PayloadHasher, sortFields } from '@xyo-network/core'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Logger } from '@xyo-network/shared'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n readonly inlinePayloads?: boolean\n readonly meta?: boolean\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await BoundWitnessWrapper.hashAsync(hashableFields)\n\n /* get all the previousHashes to verify atomic signing */\n const previousHashes = this._accounts.map((account) => account.previousHash)\n\n const ret: TBoundWitness = {\n ...hashableFields,\n _signatures: await this.signatures(_hash, previousHashes),\n }\n if (meta ?? this.config?.meta) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const bwWithMeta = ret as any\n bwWithMeta._client = 'js'\n bwWithMeta._hash = _hash\n bwWithMeta._timestamp = this._timestamp\n }\n if (this.config.inlinePayloads) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const anyRet = ret as any\n //leaving this in here to prevent breaking code (for now)\n anyRet._payloads = this.inlinePayloads()\n }\n return [ret, this._payloads, this._errors]\n })\n }\n\n error(payload?: ModuleError) {\n const unwrappedPayload = PayloadWrapper.unwrap(payload)\n assertEx(this._errorHashes === undefined, 'Can not set errors when hashes already set')\n if (unwrappedPayload) {\n this._errors.push(assertEx(sortFields(unwrappedPayload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n errors?.forEach((error) => {\n if (error !== null) {\n this.error(error)\n }\n })\n return this\n }\n\n async hashableFields(): Promise<TBoundWitness> {\n const addresses = this._accounts.map((account) => account.address)\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n return result\n }\n\n hashes(hashes: string[], schema: string[]) {\n assertEx(this.payloads.length === 0, 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n const unwrappedPayload = PayloadWrapper.unwrap<TPayload>(payload)\n assertEx(this._payloadHashes === undefined, 'Can not set payloads when hashes already set')\n if (unwrappedPayload) {\n this._payloads.push(assertEx(sortFields<TPayload>(unwrappedPayload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n payloads?.forEach((payload) => {\n if (payload !== null) {\n this.payload(payload)\n }\n })\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | Data | undefined)[]) {\n const hash = Buffer.from(_hash, 'hex')\n return await Promise.all(\n this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString('hex')),\n )\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { BoundWitness, BoundWitnessSchema, isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport type QueryBoundWitnessSchema = BoundWitnessSchema\nexport const QueryBoundWitnessSchema: QueryBoundWitnessSchema = BoundWitnessSchema\n\nexport type QueryBoundWitness = BoundWitness<{\n query: string\n resultSet?: string\n schema: BoundWitnessSchema\n}>\n\nexport const isQueryBoundWitness = (x?: Payload | null): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\n"],"mappings":"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","names":["import_assert","import_boundwitness_model"]}
|