@xyo-network/boundwitness-builder 2.75.15 → 2.75.16

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.
Files changed (50) hide show
  1. package/dist/docs.json +162 -162
  2. package/package.json +17 -17
  3. package/dist/browser/Builder.cjs +0 -161
  4. package/dist/browser/Builder.cjs.map +0 -1
  5. package/dist/browser/Builder.js +0 -140
  6. package/dist/browser/Builder.js.map +0 -1
  7. package/dist/browser/Query/QueryBoundWitness.cjs +0 -30
  8. package/dist/browser/Query/QueryBoundWitness.cjs.map +0 -1
  9. package/dist/browser/Query/QueryBoundWitness.js +0 -9
  10. package/dist/browser/Query/QueryBoundWitness.js.map +0 -1
  11. package/dist/browser/Query/QueryBoundWitnessBuilder.cjs +0 -192
  12. package/dist/browser/Query/QueryBoundWitnessBuilder.cjs.map +0 -1
  13. package/dist/browser/Query/QueryBoundWitnessBuilder.js +0 -171
  14. package/dist/browser/Query/QueryBoundWitnessBuilder.js.map +0 -1
  15. package/dist/browser/Query/QueryBoundWitnessValidator.cjs +0 -76
  16. package/dist/browser/Query/QueryBoundWitnessValidator.cjs.map +0 -1
  17. package/dist/browser/Query/QueryBoundWitnessValidator.js +0 -55
  18. package/dist/browser/Query/QueryBoundWitnessValidator.js.map +0 -1
  19. package/dist/browser/Query/QueryBoundWitnessWrapper.cjs +0 -127
  20. package/dist/browser/Query/QueryBoundWitnessWrapper.cjs.map +0 -1
  21. package/dist/browser/Query/QueryBoundWitnessWrapper.js +0 -106
  22. package/dist/browser/Query/QueryBoundWitnessWrapper.js.map +0 -1
  23. package/dist/browser/Query/index.cjs +0 -294
  24. package/dist/browser/Query/index.cjs.map +0 -1
  25. package/dist/browser/Query/index.js +0 -271
  26. package/dist/browser/Query/index.js.map +0 -1
  27. package/dist/node/Builder.js +0 -169
  28. package/dist/node/Builder.js.map +0 -1
  29. package/dist/node/Builder.mjs +0 -144
  30. package/dist/node/Builder.mjs.map +0 -1
  31. package/dist/node/Query/QueryBoundWitness.js +0 -35
  32. package/dist/node/Query/QueryBoundWitness.js.map +0 -1
  33. package/dist/node/Query/QueryBoundWitness.mjs +0 -9
  34. package/dist/node/Query/QueryBoundWitness.mjs.map +0 -1
  35. package/dist/node/Query/QueryBoundWitnessBuilder.js +0 -201
  36. package/dist/node/Query/QueryBoundWitnessBuilder.js.map +0 -1
  37. package/dist/node/Query/QueryBoundWitnessBuilder.mjs +0 -176
  38. package/dist/node/Query/QueryBoundWitnessBuilder.mjs.map +0 -1
  39. package/dist/node/Query/QueryBoundWitnessValidator.js +0 -80
  40. package/dist/node/Query/QueryBoundWitnessValidator.js.map +0 -1
  41. package/dist/node/Query/QueryBoundWitnessValidator.mjs +0 -55
  42. package/dist/node/Query/QueryBoundWitnessValidator.mjs.map +0 -1
  43. package/dist/node/Query/QueryBoundWitnessWrapper.js +0 -131
  44. package/dist/node/Query/QueryBoundWitnessWrapper.js.map +0 -1
  45. package/dist/node/Query/QueryBoundWitnessWrapper.mjs +0 -106
  46. package/dist/node/Query/QueryBoundWitnessWrapper.mjs.map +0 -1
  47. package/dist/node/Query/index.js +0 -307
  48. package/dist/node/Query/index.js.map +0 -1
  49. package/dist/node/Query/index.mjs +0 -276
  50. package/dist/node/Query/index.mjs.map +0 -1
package/package.json CHANGED
@@ -10,26 +10,26 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^2.12.22",
14
- "@xylabs/buffer": "^2.12.22",
15
- "@xylabs/lodash": "^2.12.22",
16
- "@xyo-network/account-model": "~2.75.15",
17
- "@xyo-network/boundwitness-model": "~2.75.15",
18
- "@xyo-network/boundwitness-validator": "~2.75.15",
19
- "@xyo-network/boundwitness-wrapper": "~2.75.15",
20
- "@xyo-network/core": "~2.75.15",
21
- "@xyo-network/error": "~2.75.15",
22
- "@xyo-network/payload": "~2.75.15",
23
- "@xyo-network/payload-model": "~2.75.15",
24
- "@xyo-network/payload-wrapper": "~2.75.15",
25
- "@xyo-network/shared": "~2.75.15",
13
+ "@xylabs/assert": "^2.12.23",
14
+ "@xylabs/buffer": "^2.12.23",
15
+ "@xylabs/lodash": "^2.12.23",
16
+ "@xyo-network/account-model": "~2.75.16",
17
+ "@xyo-network/boundwitness-model": "~2.75.16",
18
+ "@xyo-network/boundwitness-validator": "~2.75.16",
19
+ "@xyo-network/boundwitness-wrapper": "~2.75.16",
20
+ "@xyo-network/core": "~2.75.16",
21
+ "@xyo-network/error": "~2.75.16",
22
+ "@xyo-network/payload": "~2.75.16",
23
+ "@xyo-network/payload-model": "~2.75.16",
24
+ "@xyo-network/payload-wrapper": "~2.75.16",
25
+ "@xyo-network/shared": "~2.75.16",
26
26
  "async-mutex": "^0.4.0"
27
27
  },
28
28
  "description": "Primary SDK for using XYO Protocol 2.0",
29
29
  "devDependencies": {
30
- "@xylabs/ts-scripts-yarn3": "^3.0.88",
31
- "@xylabs/tsconfig": "^3.0.88",
32
- "@xyo-network/account": "~2.75.15",
30
+ "@xylabs/ts-scripts-yarn3": "^3.1.3",
31
+ "@xylabs/tsconfig": "^3.1.3",
32
+ "@xyo-network/account": "~2.75.16",
33
33
  "typescript": "^5.2.2"
34
34
  },
35
35
  "docs": "dist/docs.json",
@@ -74,5 +74,5 @@
74
74
  },
75
75
  "sideEffects": false,
76
76
  "types": "dist/node/index.d.ts",
77
- "version": "2.75.15"
77
+ "version": "2.75.16"
78
78
  }
@@ -1,161 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/Builder.ts
21
- var Builder_exports = {};
22
- __export(Builder_exports, {
23
- BoundWitnessBuilder: () => BoundWitnessBuilder
24
- });
25
- module.exports = __toCommonJS(Builder_exports);
26
- var import_assert = require("@xylabs/assert");
27
- var import_buffer = require("@xylabs/buffer");
28
- var import_boundwitness_model = require("@xyo-network/boundwitness-model");
29
- var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
30
- var import_core = require("@xyo-network/core");
31
- var import_payload = require("@xyo-network/payload");
32
- var import_async_mutex = require("async-mutex");
33
- var BoundWitnessBuilder = class _BoundWitnessBuilder {
34
- constructor(config = { inlinePayloads: false }, logger) {
35
- this.config = config;
36
- this.logger = logger;
37
- }
38
- static _buildMutex = new import_async_mutex.Mutex();
39
- _accounts = [];
40
- _errorHashes;
41
- _errors = [];
42
- _payloadHashes;
43
- _payloadSchemas;
44
- _payloads = [];
45
- _timestamp = Date.now();
46
- get _payload_schemas() {
47
- return this._payloadSchemas ?? this._payloads.map((payload) => {
48
- return (0, import_assert.assertEx)(payload.schema, () => this.missingSchemaMessage(payload));
49
- });
50
- }
51
- async build(meta = false) {
52
- return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
53
- const hashableFields = await this.hashableFields();
54
- const _hash = await import_boundwitness_wrapper.BoundWitnessWrapper.hashAsync(hashableFields);
55
- const previousHashes = this._accounts.map((account) => account.previousHash);
56
- const ret = {
57
- ...hashableFields,
58
- _signatures: await this.signatures(_hash, previousHashes)
59
- };
60
- if (meta ?? this.config?.meta) {
61
- const bwWithMeta = ret;
62
- bwWithMeta._client = "js";
63
- bwWithMeta._hash = _hash;
64
- bwWithMeta._timestamp = this._timestamp;
65
- }
66
- if (this.config.inlinePayloads) {
67
- const anyRet = ret;
68
- anyRet._payloads = this.inlinePayloads();
69
- }
70
- return [ret, this._payloads, this._errors];
71
- });
72
- }
73
- error(payload) {
74
- const unwrappedPayload = import_payload.PayloadWrapper.unwrap(payload);
75
- (0, import_assert.assertEx)(this._errorHashes === void 0, "Can not set errors when hashes already set");
76
- if (unwrappedPayload) {
77
- this._errors.push((0, import_assert.assertEx)((0, import_core.sortFields)(unwrappedPayload)));
78
- }
79
- return this;
80
- }
81
- errors(errors) {
82
- errors?.forEach((error) => {
83
- if (error !== null) {
84
- this.error(error);
85
- }
86
- });
87
- return this;
88
- }
89
- async hashableFields() {
90
- const addresses = this._accounts.map((account) => account.address);
91
- const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
92
- const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
93
- const payload_schemas = (0, import_assert.assertEx)(this._payload_schemas, "Missing payload_schemas");
94
- const result = {
95
- addresses: (0, import_assert.assertEx)(addresses, "Missing addresses"),
96
- payload_hashes,
97
- payload_schemas,
98
- previous_hashes,
99
- schema: import_boundwitness_model.BoundWitnessSchema
100
- };
101
- (0, import_assert.assertEx)(result.payload_hashes?.length === result.payload_schemas?.length, "Payload hash/schema mismatch");
102
- (0, import_assert.assertEx)(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
103
- (0, import_assert.assertEx)(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
104
- if (this.config.timestamp ?? true) {
105
- result.timestamp = this._timestamp;
106
- }
107
- return result;
108
- }
109
- hashes(hashes, schema) {
110
- (0, import_assert.assertEx)(this.payloads.length === 0, "Can not set hashes when payloads already set");
111
- this._payloadHashes = hashes;
112
- this._payloadSchemas = schema;
113
- return this;
114
- }
115
- payload(payload) {
116
- const unwrappedPayload = import_payload.PayloadWrapper.unwrap(payload);
117
- (0, import_assert.assertEx)(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
118
- if (unwrappedPayload) {
119
- this._payloads.push((0, import_assert.assertEx)((0, import_core.sortFields)(unwrappedPayload)));
120
- }
121
- return this;
122
- }
123
- payloads(payloads) {
124
- payloads?.forEach((payload) => {
125
- if (payload !== null) {
126
- this.payload(payload);
127
- }
128
- });
129
- return this;
130
- }
131
- witness(account) {
132
- this._accounts?.push(account);
133
- return this;
134
- }
135
- witnesses(accounts) {
136
- this._accounts?.push(...accounts);
137
- return this;
138
- }
139
- async signatures(_hash, previousHashes) {
140
- const hash = import_buffer.Buffer.from(_hash, "hex");
141
- return await Promise.all(
142
- this._accounts.map(async (account, index) => import_buffer.Buffer.from(await account.sign(hash, previousHashes[index])).toString("hex"))
143
- );
144
- }
145
- async getPayloadHashes() {
146
- return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) => import_core.PayloadHasher.hashAsync(payload)));
147
- }
148
- inlinePayloads() {
149
- return this._payloads.map((payload, index) => {
150
- return {
151
- ...payload,
152
- schema: this._payload_schemas[index]
153
- };
154
- });
155
- }
156
- missingSchemaMessage(payload) {
157
- return `Builder: Missing Schema
158
- ${JSON.stringify(payload, null, 2)}`;
159
- }
160
- };
161
- //# sourceMappingURL=Builder.cjs.map
@@ -1 +0,0 @@
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":[]}
@@ -1,140 +0,0 @@
1
- // src/Builder.ts
2
- import { assertEx } from "@xylabs/assert";
3
- import { Buffer } from "@xylabs/buffer";
4
- import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
5
- import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
6
- import { PayloadHasher, sortFields } from "@xyo-network/core";
7
- import { PayloadWrapper } from "@xyo-network/payload";
8
- import { Mutex } from "async-mutex";
9
- var BoundWitnessBuilder = class _BoundWitnessBuilder {
10
- constructor(config = { inlinePayloads: false }, logger) {
11
- this.config = config;
12
- this.logger = logger;
13
- }
14
- static _buildMutex = new Mutex();
15
- _accounts = [];
16
- _errorHashes;
17
- _errors = [];
18
- _payloadHashes;
19
- _payloadSchemas;
20
- _payloads = [];
21
- _timestamp = Date.now();
22
- get _payload_schemas() {
23
- return this._payloadSchemas ?? this._payloads.map((payload) => {
24
- return assertEx(payload.schema, () => this.missingSchemaMessage(payload));
25
- });
26
- }
27
- async build(meta = false) {
28
- return await _BoundWitnessBuilder._buildMutex.runExclusive(async () => {
29
- const hashableFields = await this.hashableFields();
30
- const _hash = await BoundWitnessWrapper.hashAsync(hashableFields);
31
- const previousHashes = this._accounts.map((account) => account.previousHash);
32
- const ret = {
33
- ...hashableFields,
34
- _signatures: await this.signatures(_hash, previousHashes)
35
- };
36
- if (meta ?? this.config?.meta) {
37
- const bwWithMeta = ret;
38
- bwWithMeta._client = "js";
39
- bwWithMeta._hash = _hash;
40
- bwWithMeta._timestamp = this._timestamp;
41
- }
42
- if (this.config.inlinePayloads) {
43
- const anyRet = ret;
44
- anyRet._payloads = this.inlinePayloads();
45
- }
46
- return [ret, this._payloads, this._errors];
47
- });
48
- }
49
- error(payload) {
50
- const unwrappedPayload = PayloadWrapper.unwrap(payload);
51
- assertEx(this._errorHashes === void 0, "Can not set errors when hashes already set");
52
- if (unwrappedPayload) {
53
- this._errors.push(assertEx(sortFields(unwrappedPayload)));
54
- }
55
- return this;
56
- }
57
- errors(errors) {
58
- errors?.forEach((error) => {
59
- if (error !== null) {
60
- this.error(error);
61
- }
62
- });
63
- return this;
64
- }
65
- async hashableFields() {
66
- const addresses = this._accounts.map((account) => account.address);
67
- const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
68
- const payload_hashes = assertEx(await this.getPayloadHashes(), "Missing payload_hashes");
69
- const payload_schemas = assertEx(this._payload_schemas, "Missing payload_schemas");
70
- const result = {
71
- addresses: assertEx(addresses, "Missing addresses"),
72
- payload_hashes,
73
- payload_schemas,
74
- previous_hashes,
75
- schema: BoundWitnessSchema
76
- };
77
- assertEx(result.payload_hashes?.length === result.payload_schemas?.length, "Payload hash/schema mismatch");
78
- assertEx(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
79
- assertEx(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
80
- if (this.config.timestamp ?? true) {
81
- result.timestamp = this._timestamp;
82
- }
83
- return result;
84
- }
85
- hashes(hashes, schema) {
86
- assertEx(this.payloads.length === 0, "Can not set hashes when payloads already set");
87
- this._payloadHashes = hashes;
88
- this._payloadSchemas = schema;
89
- return this;
90
- }
91
- payload(payload) {
92
- const unwrappedPayload = PayloadWrapper.unwrap(payload);
93
- assertEx(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
94
- if (unwrappedPayload) {
95
- this._payloads.push(assertEx(sortFields(unwrappedPayload)));
96
- }
97
- return this;
98
- }
99
- payloads(payloads) {
100
- payloads?.forEach((payload) => {
101
- if (payload !== null) {
102
- this.payload(payload);
103
- }
104
- });
105
- return this;
106
- }
107
- witness(account) {
108
- this._accounts?.push(account);
109
- return this;
110
- }
111
- witnesses(accounts) {
112
- this._accounts?.push(...accounts);
113
- return this;
114
- }
115
- async signatures(_hash, previousHashes) {
116
- const hash = Buffer.from(_hash, "hex");
117
- return await Promise.all(
118
- this._accounts.map(async (account, index) => Buffer.from(await account.sign(hash, previousHashes[index])).toString("hex"))
119
- );
120
- }
121
- async getPayloadHashes() {
122
- return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload)));
123
- }
124
- inlinePayloads() {
125
- return this._payloads.map((payload, index) => {
126
- return {
127
- ...payload,
128
- schema: this._payload_schemas[index]
129
- };
130
- });
131
- }
132
- missingSchemaMessage(payload) {
133
- return `Builder: Missing Schema
134
- ${JSON.stringify(payload, null, 2)}`;
135
- }
136
- };
137
- export {
138
- BoundWitnessBuilder
139
- };
140
- //# sourceMappingURL=Builder.js.map
@@ -1 +0,0 @@
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":[]}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/Query/QueryBoundWitness.ts
21
- var QueryBoundWitness_exports = {};
22
- __export(QueryBoundWitness_exports, {
23
- QueryBoundWitnessSchema: () => QueryBoundWitnessSchema,
24
- isQueryBoundWitness: () => isQueryBoundWitness
25
- });
26
- module.exports = __toCommonJS(QueryBoundWitness_exports);
27
- var import_boundwitness_model = require("@xyo-network/boundwitness-model");
28
- var QueryBoundWitnessSchema = import_boundwitness_model.BoundWitnessSchema;
29
- var isQueryBoundWitness = (x) => (0, import_boundwitness_model.isBoundWitness)(x) && x?.query !== void 0;
30
- //# sourceMappingURL=QueryBoundWitness.cjs.map
@@ -1 +0,0 @@
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,KAAM,GAAyB,UAAU;","names":[]}
@@ -1,9 +0,0 @@
1
- // src/Query/QueryBoundWitness.ts
2
- import { BoundWitnessSchema, isBoundWitness } from "@xyo-network/boundwitness-model";
3
- var QueryBoundWitnessSchema = BoundWitnessSchema;
4
- var isQueryBoundWitness = (x) => isBoundWitness(x) && x?.query !== void 0;
5
- export {
6
- QueryBoundWitnessSchema,
7
- isQueryBoundWitness
8
- };
9
- //# sourceMappingURL=QueryBoundWitness.js.map
@@ -1 +0,0 @@
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,KAAM,GAAyB,UAAU;","names":[]}
@@ -1,192 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/Query/QueryBoundWitnessBuilder.ts
21
- var QueryBoundWitnessBuilder_exports = {};
22
- __export(QueryBoundWitnessBuilder_exports, {
23
- QueryBoundWitnessBuilder: () => QueryBoundWitnessBuilder
24
- });
25
- module.exports = __toCommonJS(QueryBoundWitnessBuilder_exports);
26
- var import_assert2 = require("@xylabs/assert");
27
- var import_payload_wrapper = require("@xyo-network/payload-wrapper");
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
- const hashableFields = await this.hashableFields();
58
- const _hash = await import_boundwitness_wrapper.BoundWitnessWrapper.hashAsync(hashableFields);
59
- const previousHashes = this._accounts.map((account) => account.previousHash);
60
- const ret = {
61
- ...hashableFields,
62
- _signatures: await this.signatures(_hash, previousHashes)
63
- };
64
- if (meta ?? this.config?.meta) {
65
- const bwWithMeta = ret;
66
- bwWithMeta._client = "js";
67
- bwWithMeta._hash = _hash;
68
- bwWithMeta._timestamp = this._timestamp;
69
- }
70
- if (this.config.inlinePayloads) {
71
- const anyRet = ret;
72
- anyRet._payloads = this.inlinePayloads();
73
- }
74
- return [ret, this._payloads, this._errors];
75
- });
76
- }
77
- error(payload) {
78
- const unwrappedPayload = import_payload.PayloadWrapper.unwrap(payload);
79
- (0, import_assert.assertEx)(this._errorHashes === void 0, "Can not set errors when hashes already set");
80
- if (unwrappedPayload) {
81
- this._errors.push((0, import_assert.assertEx)((0, import_core.sortFields)(unwrappedPayload)));
82
- }
83
- return this;
84
- }
85
- errors(errors) {
86
- errors?.forEach((error) => {
87
- if (error !== null) {
88
- this.error(error);
89
- }
90
- });
91
- return this;
92
- }
93
- async hashableFields() {
94
- const addresses = this._accounts.map((account) => account.address);
95
- const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
96
- const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
97
- const payload_schemas = (0, import_assert.assertEx)(this._payload_schemas, "Missing payload_schemas");
98
- const result = {
99
- addresses: (0, import_assert.assertEx)(addresses, "Missing addresses"),
100
- payload_hashes,
101
- payload_schemas,
102
- previous_hashes,
103
- schema: import_boundwitness_model.BoundWitnessSchema
104
- };
105
- (0, import_assert.assertEx)(result.payload_hashes?.length === result.payload_schemas?.length, "Payload hash/schema mismatch");
106
- (0, import_assert.assertEx)(!result.payload_hashes.reduce((inValid, hash) => inValid || !hash, false), "nulls found in hashes");
107
- (0, import_assert.assertEx)(!result.payload_schemas.reduce((inValid, schema) => inValid || !schema, false), "nulls found in schemas");
108
- if (this.config.timestamp ?? true) {
109
- result.timestamp = this._timestamp;
110
- }
111
- return result;
112
- }
113
- hashes(hashes, schema) {
114
- (0, import_assert.assertEx)(this.payloads.length === 0, "Can not set hashes when payloads already set");
115
- this._payloadHashes = hashes;
116
- this._payloadSchemas = schema;
117
- return this;
118
- }
119
- payload(payload) {
120
- const unwrappedPayload = import_payload.PayloadWrapper.unwrap(payload);
121
- (0, import_assert.assertEx)(this._payloadHashes === void 0, "Can not set payloads when hashes already set");
122
- if (unwrappedPayload) {
123
- this._payloads.push((0, import_assert.assertEx)((0, import_core.sortFields)(unwrappedPayload)));
124
- }
125
- return this;
126
- }
127
- payloads(payloads) {
128
- payloads?.forEach((payload) => {
129
- if (payload !== null) {
130
- this.payload(payload);
131
- }
132
- });
133
- return this;
134
- }
135
- witness(account) {
136
- this._accounts?.push(account);
137
- return this;
138
- }
139
- witnesses(accounts) {
140
- this._accounts?.push(...accounts);
141
- return this;
142
- }
143
- async signatures(_hash, previousHashes) {
144
- const hash = import_buffer.Buffer.from(_hash, "hex");
145
- return await Promise.all(
146
- this._accounts.map(async (account, index) => import_buffer.Buffer.from(await account.sign(hash, previousHashes[index])).toString("hex"))
147
- );
148
- }
149
- async getPayloadHashes() {
150
- return this._payloadHashes ?? await Promise.all(this._payloads.map((payload) => import_core.PayloadHasher.hashAsync(payload)));
151
- }
152
- inlinePayloads() {
153
- return this._payloads.map((payload, index) => {
154
- return {
155
- ...payload,
156
- schema: this._payload_schemas[index]
157
- };
158
- });
159
- }
160
- missingSchemaMessage(payload) {
161
- return `Builder: Missing Schema
162
- ${JSON.stringify(payload, null, 2)}`;
163
- }
164
- };
165
-
166
- // src/Query/QueryBoundWitness.ts
167
- var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
168
- var QueryBoundWitnessSchema = import_boundwitness_model2.BoundWitnessSchema;
169
-
170
- // src/Query/QueryBoundWitnessBuilder.ts
171
- var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
172
- _query;
173
- _resultSet;
174
- async hashableFields() {
175
- return {
176
- ...await super.hashableFields(),
177
- query: (0, import_assert2.assertEx)(await this._query?.hashAsync(), "No Query Specified"),
178
- schema: QueryBoundWitnessSchema
179
- };
180
- }
181
- query(query) {
182
- this._query = import_payload_wrapper.PayloadWrapper.wrap(query);
183
- this.payload(this._query.payload());
184
- return this;
185
- }
186
- resultSet(payloadSet) {
187
- this._resultSet = import_payload_wrapper.PayloadWrapper.wrap(payloadSet);
188
- this.payload(this._resultSet.payload());
189
- return this;
190
- }
191
- };
192
- //# sourceMappingURL=QueryBoundWitnessBuilder.cjs.map