@xyo-network/boundwitness-builder 2.84.19 → 2.85.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.
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -36,19 +37,30 @@ var import_hash = require("@xyo-network/hash");
36
37
  var import_payload = require("@xyo-network/payload");
37
38
  var import_async_mutex = require("async-mutex");
38
39
  var BoundWitnessBuilder = class _BoundWitnessBuilder {
39
- constructor(config = { inlinePayloads: false }, logger) {
40
- this.config = config;
41
- this.logger = logger;
40
+ static {
41
+ __name(this, "BoundWitnessBuilder");
42
42
  }
43
+ config;
44
+ logger;
43
45
  static _buildMutex = new import_async_mutex.Mutex();
44
- _accounts = [];
46
+ _accounts;
45
47
  _errorHashes;
46
- _errors = [];
48
+ _errors;
47
49
  _payloadHashes;
48
50
  _payloadSchemas;
49
- _payloads = [];
51
+ _payloads;
50
52
  _sourceQuery;
51
- _timestamp = Date.now();
53
+ _timestamp;
54
+ constructor(config = {
55
+ inlinePayloads: false
56
+ }, logger) {
57
+ this.config = config;
58
+ this.logger = logger;
59
+ this._accounts = [];
60
+ this._errors = [];
61
+ this._payloads = [];
62
+ this._timestamp = Date.now();
63
+ }
52
64
  get _payload_schemas() {
53
65
  return this._payloadSchemas ?? this._payloads.map((payload) => {
54
66
  return (0, import_assert.assertEx)(payload.schema, () => this.missingSchemaMessage(payload));
@@ -76,7 +88,11 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
76
88
  const anyRet = ret;
77
89
  anyRet._payloads = this.inlinePayloads();
78
90
  }
79
- return [ret, this._payloads, this._errors];
91
+ return [
92
+ ret,
93
+ this._payloads,
94
+ this._errors
95
+ ];
80
96
  });
81
97
  }
82
98
  error(payload) {
@@ -96,9 +112,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
96
112
  return this;
97
113
  }
98
114
  async hashableFields() {
99
- const addresses = this._accounts.map(
100
- (account) => account.addressBytes ? (0, import_hex.hexFromArrayBuffer)(account.addressBytes, { prefix: false }) : void 0
101
- );
115
+ const addresses = this._accounts.map((account) => account.addressBytes ? (0, import_hex.hexFromArrayBuffer)(account.addressBytes, {
116
+ prefix: false
117
+ }) : void 0);
102
118
  const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
103
119
  const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
104
120
  const payload_schemas = (0, import_assert.assertEx)(this._payload_schemas, "Missing payload_schemas");
@@ -183,6 +199,9 @@ var import_assert2 = require("@xylabs/assert");
183
199
  var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
184
200
  var import_payload_wrapper = require("@xyo-network/payload-wrapper");
185
201
  var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
202
+ static {
203
+ __name(this, "QueryBoundWitnessBuilder");
204
+ }
186
205
  _query;
187
206
  async hashableFields() {
188
207
  return {
@@ -205,6 +224,9 @@ var import_boundwitness_wrapper2 = require("@xyo-network/boundwitness-wrapper");
205
224
  var import_hash2 = require("@xyo-network/hash");
206
225
  var import_payload_wrapper2 = require("@xyo-network/payload-wrapper");
207
226
  var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_boundwitness_wrapper2.BoundWitnessWrapper {
227
+ static {
228
+ __name(this, "QueryBoundWitnessWrapper");
229
+ }
208
230
  _payloadsWithoutQuery;
209
231
  _query;
210
232
  _resultSet;
@@ -226,12 +248,7 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_bo
226
248
  return (0, import_assert3.assertEx)(this._query, `Missing Query [${this.boundwitness}]`);
227
249
  }
228
250
  async getWrappedPayloads() {
229
- this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? (0, import_lodash.compact)(
230
- (await import_hash2.PayloadHasher.filterExclude(
231
- (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
232
- this.payload().query
233
- )).map((payload) => import_payload_wrapper2.PayloadWrapper.wrap(payload))
234
- );
251
+ this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? (0, import_lodash.compact)((await import_hash2.PayloadHasher.filterExclude((await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()), this.payload().query)).map((payload) => import_payload_wrapper2.PayloadWrapper.wrap(payload)));
235
252
  return this._payloadsWithoutQuery;
236
253
  }
237
254
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,yBAA4C;AAC5C,oBAAyB;AACzB,iBAAmC;AAGnC,gCAAiD;AACjD,kCAAoC;AACpC,kBAA0C;AAC1C,qBAA+B;AAE/B,yBAAsB;AAYf,IAAM,sBAAN,MAAM,qBAA+H;AAAA,EAW1I,YACW,SAAoC,EAAE,gBAAgB,MAAM,GAClD,QACnB;AAFS;AACU;AAAA,EAClB;AAAA,EAbH,OAAwB,cAAc,IAAI,yBAAM;AAAA,EACxC,YAA+B,CAAC;AAAA,EAChC;AAAA,EACA,UAAyB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAwB,CAAC;AAAA,EACzB;AAAA,EACA,aAAa,KAAK,IAAI;AAAA,EAO9B,IAAY,mBAA6B;AACvC,WACE,KAAK,mBACL,KAAK,UAAU,IAAI,CAAC,YAAY;AAC9B,iBAAO,wBAAS,QAAQ,QAAQ,MAAM,KAAK,qBAAqB,OAAO,CAAC;AAAA,IAC1E,CAAC;AAAA,EAEL;AAAA,EAEA,MAAM,MAAM,OAAO,OAA4D;AAC7E,QAAI,MAAM;AACR,cAAQ,IAAI,2EAA2E;AAAA,IACzF;AACA,WAAO,MAAM,qBAAoB,YAAY,aAAa,YAAY;AACpE,YAAM,iBAAiB,MAAM,KAAK,eAAe;AACjD,YAAM,QAAQ,MAAM,gDAAoB,UAAU,cAAc;AAGhE,YAAM,iBAAiB,KAAK,UAAU,IAAI,CAAC,YAAY,QAAQ,YAAY;AAE3E,YAAM,MAAqB;AAAA,QACzB,GAAG;AAAA,QACH,aAAa,MAAM,KAAK,WAAW,OAAO,cAAc;AAAA,MAC1D;AACA,UAAI,QAAQ,KAAK,QAAQ,MAAM;AAE7B,cAAM,aAAa;AACnB,mBAAW,UAAU;AACrB,mBAAW,QAAQ;AACnB,mBAAW,aAAa,KAAK;AAAA,MAC/B;AACA,UAAI,KAAK,OAAO,gBAAgB;AAE9B,cAAM,SAAS;AAEf,eAAO,YAAY,KAAK,eAAe;AAAA,MACzC;AACA,aAAO,CAAC,KAAK,KAAK,WAAW,KAAK,OAAO;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAuB;AAC3B,UAAM,mBAAmB,8BAAe,OAAO,OAAO;AACtD,gCAAS,KAAK,iBAAiB,QAAW,4CAA4C;AACtF,QAAI,kBAAkB;AACpB,WAAK,QAAQ,SAAK,4BAAS,wBAAW,gBAAgB,CAAC,CAAC;AAAA,IAC1D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAiC;AACtC,eAAW,SAAS,UAAU,CAAC,GAAG;AAChC,UAAI,UAAU,MAAM;AAClB,aAAK,MAAM,KAAK;AAAA,MAClB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAyC;AAC7C,UAAM,YAAY,KAAK,UAAU;AAAA,MAAI,CAAC,YACpC,QAAQ,mBAAe,+BAAmB,QAAQ,cAAc,EAAE,QAAQ,MAAM,CAAC,IAAI;AAAA,IACvF;AACA,UAAM,kBAAkB,KAAK,UAAU,IAAI,CAAC,YAAY,QAAQ,gBAAgB,IAAI;AACpF,UAAM,qBAAiB,wBAAS,MAAM,KAAK,iBAAiB,GAAG,wBAAwB;AACvF,UAAM,sBAAkB,wBAAS,KAAK,kBAAkB,yBAAyB;AACjF,UAAM,SAAwB;AAAA,MAC5B,eAAW,wBAAS,WAAW,mBAAmB;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAEA,gCAAS,OAAO,gBAAgB,WAAW,OAAO,iBAAiB,QAAQ,8BAA8B;AAEzG,gCAAS,CAAC,OAAO,eAAe,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,uBAAuB;AAEpF,gCAAS,CAAC,OAAO,gBAAgB,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,wBAAwB;AAEpF,QAAI,KAAK,OAAO,aAAa,MAAM;AACjC,aAAO,YAAY,KAAK;AAAA,IAC1B;AAEA,QAAI,KAAK,cAAc;AACrB,aAAO,cAAc,KAAK;AAAA,IAC5B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAkB,QAAkB;AACzC,gCAAS,KAAK,SAAS,WAAW,GAAG,8CAA8C;AACnF,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAAoB;AAC1B,UAAM,mBAAmB,8BAAe,OAAiB,OAAO;AAChE,gCAAS,KAAK,mBAAmB,QAAW,8CAA8C;AAC1F,QAAI,kBAAkB;AACpB,WAAK,UAAU,SAAK,4BAAS,wBAAqB,gBAAgB,CAAC,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAgC;AACvC,QAAI;AACF,iBAAW,WAAW,UAAU;AAC9B,YAAI,YAAY,MAAM;AACpB,eAAK,QAAQ,OAAO;AAAA,QACtB;AAAA,MACF;AACF,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,MAAe;AACzB,SAAK,eAAe;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAA0B;AAChC,SAAK,WAAW,KAAK,OAAO;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,UAA6B;AACrC,SAAK,WAAW,KAAK,GAAG,QAAQ;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,WAAW,OAAe,gBAAyE;AACjH,UAAM,WAAO,kCAAc,KAAK;AAChC,UAAM,sBAAsB,eAAe,IAAI,CAAC,OAAQ,SAAK,iCAAa,EAAE,IAAI,MAAU;AAC1F,WAAO,MAAM,QAAQ,IAAI,KAAK,UAAU,IAAI,OAAO,SAAS,cAAU,+BAAmB,MAAM,QAAQ,KAAK,MAAM,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAC;AAAA,EACjJ;AAAA,EAEA,MAAc,mBAAsC;AAClD,WAAO,KAAK,kBAAmB,MAAM,QAAQ,IAAI,KAAK,UAAU,IAAI,CAAC,YAAY,0BAAc,UAAU,OAAO,CAAC,CAAC;AAAA,EACpH;AAAA,EAEQ,iBAAiB;AACvB,YAAQ,IAAI,mEAAmE;AAE/E,WAAO,KAAK,UAAU,IAAc,CAAC,SAAS,UAAU;AACtD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,KAAK,iBAAiB,KAAK;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,qBAAqB,SAAkB;AAC7C,WAAO;AAAA,EAA4B,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,EACrE;AACF;;;AClMA,IAAAA,iBAAyB;AACzB,IAAAC,6BAA2D;AAE3D,6BAA+B;AAIxB,IAAM,2BAAN,cAGG,oBAAmC;AAAA,EACnC;AAAA,EAER,MAAe,iBAAyC;AACtD,WAAO;AAAA,MACL,GAAI,MAAM,MAAM,eAAe;AAAA,MAC/B,WAAO,yBAAS,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;AACF;;;AC1BA,IAAAC,iBAAyB;AACzB,oBAAwB;AAExB,IAAAC,+BAAoC;AACpC,IAAAC,eAA8B;AAE9B,IAAAC,0BAA+B;AAExB,IAAM,2BAAN,MAAM,kCAA0D,iDAAuC;AAAA,EACpG;AAAA,EACA;AAAA,EACA;AAAA,EAEA,6BAA6B;AAAA,EAErC,OAAO,WAAoC,KAAc,UAAmD;AAC1G,iCAAS,CAAC,MAAM,QAAQ,GAAG,GAAG,wDAAwD;AACtF,YAAQ,OAAO,KAAK;AAAA,MAClB,KAAK,UAAU;AACb,cAAM,cAAc;AACpB,cAAM,UAAU,aAAa,6BAA6B,cAAc,IAAI,0BAA4B,KAA0B,QAAQ;AAI1I,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,IAAI,MAAM,oBAAoB,OAAO,GAAG,GAAG;AAAA,EACnD;AAAA,EAEA,MAAM,WAAuB;AAC3B,UAAM,aAAa,MAAM,KAAK,cAAc;AAC5C,SAAK,SAAS,KAAK,UAAW,WAAW,KAAK,aAAa,KAAK;AAChE,eAAO,yBAAS,KAAK,QAAQ,kBAAkB,KAAK,YAAY,GAAG;AAAA,EACrE;AAAA,EAEA,MAAe,qBAAyD;AACtE,SAAK,wBACH,KAAK,6BACL;AAAA,OAEI,MAAM,2BAAc;AAAA,SACjB,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,QAAQ,QAAQ,CAAC;AAAA,QACrE,KAAK,QAAQ,EAAE;AAAA,MACjB,GACA,IAAI,CAAC,YAAY,uCAAe,KAAK,OAAO,CAAC;AAAA,IACjD;AACF,WAAO,KAAK;AAAA,EACd;AACF;","names":["import_assert","import_boundwitness_model","import_assert","import_boundwitness_wrapper","import_hash","import_payload_wrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","_buildMutex","Mutex","_accounts","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","config","inlinePayloads","logger","Date","now","_payload_schemas","map","payload","assertEx","schema","missingSchemaMessage","build","meta","console","log","runExclusive","hashableFields","_hash","BoundWitnessWrapper","hashAsync","previousHashes","account","previousHash","ret","_signatures","signatures","bwWithMeta","_client","anyRet","error","unwrappedPayload","PayloadWrapper","unwrap","undefined","push","sortFields","errors","addresses","addressBytes","hexFromArrayBuffer","prefix","previous_hashes","payload_hashes","getPayloadHashes","payload_schemas","result","BoundWitnessSchema","length","some","hash","timestamp","sourceQuery","hashes","payloads","witness","witnesses","accounts","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","index","sign","PayloadHasher","JSON","stringify","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","hashableFields","query","assertEx","hashAsync","schema","QueryBoundWitnessSchema","PayloadWrapper","wrap","payload","import_assert","import_boundwitness_wrapper","import_hash","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","_resultSet","isQueryBoundWitnessWrapper","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","Error","getQuery","payloadMap","allPayloadMap","boundwitness","query","getWrappedPayloads","compact","PayloadHasher","filterExclude","map","payload","PayloadWrapper","wrap"]}
@@ -1,3 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/Builder.ts
2
5
  import { toArrayBuffer, toUint8Array } from "@xylabs/arraybuffer";
3
6
  import { assertEx } from "@xylabs/assert";
@@ -8,19 +11,30 @@ import { PayloadHasher, sortFields } from "@xyo-network/hash";
8
11
  import { PayloadWrapper } from "@xyo-network/payload";
9
12
  import { Mutex } from "async-mutex";
10
13
  var BoundWitnessBuilder = class _BoundWitnessBuilder {
11
- constructor(config = { inlinePayloads: false }, logger) {
12
- this.config = config;
13
- this.logger = logger;
14
+ static {
15
+ __name(this, "BoundWitnessBuilder");
14
16
  }
17
+ config;
18
+ logger;
15
19
  static _buildMutex = new Mutex();
16
- _accounts = [];
20
+ _accounts;
17
21
  _errorHashes;
18
- _errors = [];
22
+ _errors;
19
23
  _payloadHashes;
20
24
  _payloadSchemas;
21
- _payloads = [];
25
+ _payloads;
22
26
  _sourceQuery;
23
- _timestamp = Date.now();
27
+ _timestamp;
28
+ constructor(config = {
29
+ inlinePayloads: false
30
+ }, logger) {
31
+ this.config = config;
32
+ this.logger = logger;
33
+ this._accounts = [];
34
+ this._errors = [];
35
+ this._payloads = [];
36
+ this._timestamp = Date.now();
37
+ }
24
38
  get _payload_schemas() {
25
39
  return this._payloadSchemas ?? this._payloads.map((payload) => {
26
40
  return assertEx(payload.schema, () => this.missingSchemaMessage(payload));
@@ -48,7 +62,11 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
48
62
  const anyRet = ret;
49
63
  anyRet._payloads = this.inlinePayloads();
50
64
  }
51
- return [ret, this._payloads, this._errors];
65
+ return [
66
+ ret,
67
+ this._payloads,
68
+ this._errors
69
+ ];
52
70
  });
53
71
  }
54
72
  error(payload) {
@@ -68,9 +86,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
68
86
  return this;
69
87
  }
70
88
  async hashableFields() {
71
- const addresses = this._accounts.map(
72
- (account) => account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : void 0
73
- );
89
+ const addresses = this._accounts.map((account) => account.addressBytes ? hexFromArrayBuffer(account.addressBytes, {
90
+ prefix: false
91
+ }) : void 0);
74
92
  const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
75
93
  const payload_hashes = assertEx(await this.getPayloadHashes(), "Missing payload_hashes");
76
94
  const payload_schemas = assertEx(this._payload_schemas, "Missing payload_schemas");
@@ -155,6 +173,9 @@ import { assertEx as assertEx2 } from "@xylabs/assert";
155
173
  import { QueryBoundWitnessSchema } from "@xyo-network/boundwitness-model";
156
174
  import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
157
175
  var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
176
+ static {
177
+ __name(this, "QueryBoundWitnessBuilder");
178
+ }
158
179
  _query;
159
180
  async hashableFields() {
160
181
  return {
@@ -177,6 +198,9 @@ import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundw
177
198
  import { PayloadHasher as PayloadHasher2 } from "@xyo-network/hash";
178
199
  import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
179
200
  var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
201
+ static {
202
+ __name(this, "QueryBoundWitnessWrapper");
203
+ }
180
204
  _payloadsWithoutQuery;
181
205
  _query;
182
206
  _resultSet;
@@ -198,12 +222,7 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
198
222
  return assertEx3(this._query, `Missing Query [${this.boundwitness}]`);
199
223
  }
200
224
  async getWrappedPayloads() {
201
- this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact(
202
- (await PayloadHasher2.filterExclude(
203
- (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
204
- this.payload().query
205
- )).map((payload) => PayloadWrapper3.wrap(payload))
206
- );
225
+ this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact((await PayloadHasher2.filterExclude((await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()), this.payload().query)).map((payload) => PayloadWrapper3.wrap(payload)));
207
226
  return this._payloadsWithoutQuery;
208
227
  }
209
228
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadWrapper","assertEx","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadHasher","PayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","BoundWitnessWrapper","PayloadHasher","sortFields","PayloadWrapper","Mutex","BoundWitnessBuilder","_buildMutex","Mutex","_accounts","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","config","inlinePayloads","logger","Date","now","_payload_schemas","map","payload","assertEx","schema","missingSchemaMessage","build","meta","console","log","runExclusive","hashableFields","_hash","BoundWitnessWrapper","hashAsync","previousHashes","account","previousHash","ret","_signatures","signatures","bwWithMeta","_client","anyRet","error","unwrappedPayload","PayloadWrapper","unwrap","undefined","push","sortFields","errors","addresses","addressBytes","hexFromArrayBuffer","prefix","previous_hashes","payload_hashes","getPayloadHashes","payload_schemas","result","BoundWitnessSchema","length","some","hash","timestamp","sourceQuery","hashes","payloads","witness","witnesses","accounts","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","index","sign","PayloadHasher","JSON","stringify","assertEx","QueryBoundWitnessSchema","PayloadWrapper","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","hashableFields","query","assertEx","hashAsync","schema","QueryBoundWitnessSchema","PayloadWrapper","wrap","payload","assertEx","compact","BoundWitnessWrapper","PayloadHasher","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","_resultSet","isQueryBoundWitnessWrapper","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","Error","getQuery","payloadMap","allPayloadMap","boundwitness","query","getWrappedPayloads","compact","PayloadHasher","filterExclude","map","payload","PayloadWrapper","wrap"]}
@@ -3,6 +3,8 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
8
10
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -16,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
16
18
  return to;
17
19
  };
18
20
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+ var __publicField = (obj, key, value) => {
22
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
23
+ return value;
24
+ };
19
25
 
20
26
  // src/index.ts
21
27
  var src_exports = {};
@@ -35,20 +41,27 @@ var import_boundwitness_wrapper = require("@xyo-network/boundwitness-wrapper");
35
41
  var import_hash = require("@xyo-network/hash");
36
42
  var import_payload = require("@xyo-network/payload");
37
43
  var import_async_mutex = require("async-mutex");
38
- var BoundWitnessBuilder = class _BoundWitnessBuilder {
39
- constructor(config = { inlinePayloads: false }, logger) {
40
- this.config = config;
41
- this.logger = logger;
42
- }
43
- static _buildMutex = new import_async_mutex.Mutex();
44
- _accounts = [];
44
+ var _BoundWitnessBuilder = class _BoundWitnessBuilder {
45
+ config;
46
+ logger;
47
+ _accounts;
45
48
  _errorHashes;
46
- _errors = [];
49
+ _errors;
47
50
  _payloadHashes;
48
51
  _payloadSchemas;
49
- _payloads = [];
52
+ _payloads;
50
53
  _sourceQuery;
51
- _timestamp = Date.now();
54
+ _timestamp;
55
+ constructor(config = {
56
+ inlinePayloads: false
57
+ }, logger) {
58
+ this.config = config;
59
+ this.logger = logger;
60
+ this._accounts = [];
61
+ this._errors = [];
62
+ this._payloads = [];
63
+ this._timestamp = Date.now();
64
+ }
52
65
  get _payload_schemas() {
53
66
  return this._payloadSchemas ?? this._payloads.map((payload) => {
54
67
  return (0, import_assert.assertEx)(payload.schema, () => this.missingSchemaMessage(payload));
@@ -77,7 +90,11 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
77
90
  const anyRet = ret;
78
91
  anyRet._payloads = this.inlinePayloads();
79
92
  }
80
- return [ret, this._payloads, this._errors];
93
+ return [
94
+ ret,
95
+ this._payloads,
96
+ this._errors
97
+ ];
81
98
  });
82
99
  }
83
100
  error(payload) {
@@ -98,9 +115,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
98
115
  }
99
116
  async hashableFields() {
100
117
  var _a, _b;
101
- const addresses = this._accounts.map(
102
- (account) => account.addressBytes ? (0, import_hex.hexFromArrayBuffer)(account.addressBytes, { prefix: false }) : void 0
103
- );
118
+ const addresses = this._accounts.map((account) => account.addressBytes ? (0, import_hex.hexFromArrayBuffer)(account.addressBytes, {
119
+ prefix: false
120
+ }) : void 0);
104
121
  const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
105
122
  const payload_hashes = (0, import_assert.assertEx)(await this.getPayloadHashes(), "Missing payload_hashes");
106
123
  const payload_schemas = (0, import_assert.assertEx)(this._payload_schemas, "Missing payload_schemas");
@@ -181,12 +198,15 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
181
198
  ${JSON.stringify(payload, null, 2)}`;
182
199
  }
183
200
  };
201
+ __name(_BoundWitnessBuilder, "BoundWitnessBuilder");
202
+ __publicField(_BoundWitnessBuilder, "_buildMutex", new import_async_mutex.Mutex());
203
+ var BoundWitnessBuilder = _BoundWitnessBuilder;
184
204
 
185
205
  // src/Query/QueryBoundWitnessBuilder.ts
186
206
  var import_assert2 = require("@xylabs/assert");
187
207
  var import_boundwitness_model2 = require("@xyo-network/boundwitness-model");
188
208
  var import_payload_wrapper = require("@xyo-network/payload-wrapper");
189
- var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
209
+ var _QueryBoundWitnessBuilder = class _QueryBoundWitnessBuilder extends BoundWitnessBuilder {
190
210
  _query;
191
211
  async hashableFields() {
192
212
  var _a;
@@ -202,6 +222,8 @@ var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
202
222
  return this;
203
223
  }
204
224
  };
225
+ __name(_QueryBoundWitnessBuilder, "QueryBoundWitnessBuilder");
226
+ var QueryBoundWitnessBuilder = _QueryBoundWitnessBuilder;
205
227
 
206
228
  // src/Query/QueryBoundWitnessWrapper.ts
207
229
  var import_assert3 = require("@xylabs/assert");
@@ -209,7 +231,7 @@ var import_lodash = require("@xylabs/lodash");
209
231
  var import_boundwitness_wrapper2 = require("@xyo-network/boundwitness-wrapper");
210
232
  var import_hash2 = require("@xyo-network/hash");
211
233
  var import_payload_wrapper2 = require("@xyo-network/payload-wrapper");
212
- var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_boundwitness_wrapper2.BoundWitnessWrapper {
234
+ var _QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_boundwitness_wrapper2.BoundWitnessWrapper {
213
235
  _payloadsWithoutQuery;
214
236
  _query;
215
237
  _resultSet;
@@ -231,15 +253,12 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends import_bo
231
253
  return (0, import_assert3.assertEx)(this._query, `Missing Query [${this.boundwitness}]`);
232
254
  }
233
255
  async getWrappedPayloads() {
234
- this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? (0, import_lodash.compact)(
235
- (await import_hash2.PayloadHasher.filterExclude(
236
- (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
237
- this.payload().query
238
- )).map((payload) => import_payload_wrapper2.PayloadWrapper.wrap(payload))
239
- );
256
+ this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? (0, import_lodash.compact)((await import_hash2.PayloadHasher.filterExclude((await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()), this.payload().query)).map((payload) => import_payload_wrapper2.PayloadWrapper.wrap(payload)));
240
257
  return this._payloadsWithoutQuery;
241
258
  }
242
259
  };
260
+ __name(_QueryBoundWitnessWrapper, "QueryBoundWitnessWrapper");
261
+ var QueryBoundWitnessWrapper = _QueryBoundWitnessWrapper;
243
262
  // Annotate the CommonJS export names for ESM import in node:
244
263
  0 && (module.exports = {
245
264
  BoundWitnessBuilder,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["import_assert","import_boundwitness_model","import_assert","import_boundwitness_wrapper","import_hash","import_payload_wrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["export * from './Builder'\nexport * from './Query'\n","import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["BoundWitnessBuilder","_accounts","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","config","inlinePayloads","logger","Date","now","_payload_schemas","map","payload","assertEx","schema","missingSchemaMessage","build","meta","console","log","_buildMutex","runExclusive","hashableFields","_hash","BoundWitnessWrapper","hashAsync","previousHashes","account","previousHash","ret","_signatures","signatures","bwWithMeta","_client","anyRet","error","unwrappedPayload","PayloadWrapper","unwrap","undefined","push","sortFields","errors","addresses","addressBytes","hexFromArrayBuffer","prefix","previous_hashes","payload_hashes","getPayloadHashes","payload_schemas","result","BoundWitnessSchema","length","some","hash","timestamp","sourceQuery","hashes","payloads","witness","witnesses","accounts","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","index","sign","PayloadHasher","JSON","stringify","Mutex","import_assert","import_boundwitness_model","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","hashableFields","query","assertEx","hashAsync","schema","QueryBoundWitnessSchema","PayloadWrapper","wrap","payload","import_assert","import_boundwitness_wrapper","import_hash","import_payload_wrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","_resultSet","isQueryBoundWitnessWrapper","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","Error","getQuery","payloadMap","allPayloadMap","boundwitness","query","getWrappedPayloads","compact","PayloadHasher","filterExclude","map","payload","PayloadWrapper","wrap"]}
@@ -1,3 +1,11 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
+ var __publicField = (obj, key, value) => {
5
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ return value;
7
+ };
8
+
1
9
  // src/Builder.ts
2
10
  import { toArrayBuffer, toUint8Array } from "@xylabs/arraybuffer";
3
11
  import { assertEx } from "@xylabs/assert";
@@ -7,20 +15,27 @@ import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
7
15
  import { PayloadHasher, sortFields } from "@xyo-network/hash";
8
16
  import { PayloadWrapper } from "@xyo-network/payload";
9
17
  import { Mutex } from "async-mutex";
10
- var BoundWitnessBuilder = class _BoundWitnessBuilder {
11
- constructor(config = { inlinePayloads: false }, logger) {
12
- this.config = config;
13
- this.logger = logger;
14
- }
15
- static _buildMutex = new Mutex();
16
- _accounts = [];
18
+ var _BoundWitnessBuilder = class _BoundWitnessBuilder {
19
+ config;
20
+ logger;
21
+ _accounts;
17
22
  _errorHashes;
18
- _errors = [];
23
+ _errors;
19
24
  _payloadHashes;
20
25
  _payloadSchemas;
21
- _payloads = [];
26
+ _payloads;
22
27
  _sourceQuery;
23
- _timestamp = Date.now();
28
+ _timestamp;
29
+ constructor(config = {
30
+ inlinePayloads: false
31
+ }, logger) {
32
+ this.config = config;
33
+ this.logger = logger;
34
+ this._accounts = [];
35
+ this._errors = [];
36
+ this._payloads = [];
37
+ this._timestamp = Date.now();
38
+ }
24
39
  get _payload_schemas() {
25
40
  return this._payloadSchemas ?? this._payloads.map((payload) => {
26
41
  return assertEx(payload.schema, () => this.missingSchemaMessage(payload));
@@ -49,7 +64,11 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
49
64
  const anyRet = ret;
50
65
  anyRet._payloads = this.inlinePayloads();
51
66
  }
52
- return [ret, this._payloads, this._errors];
67
+ return [
68
+ ret,
69
+ this._payloads,
70
+ this._errors
71
+ ];
53
72
  });
54
73
  }
55
74
  error(payload) {
@@ -70,9 +89,9 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
70
89
  }
71
90
  async hashableFields() {
72
91
  var _a, _b;
73
- const addresses = this._accounts.map(
74
- (account) => account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : void 0
75
- );
92
+ const addresses = this._accounts.map((account) => account.addressBytes ? hexFromArrayBuffer(account.addressBytes, {
93
+ prefix: false
94
+ }) : void 0);
76
95
  const previous_hashes = this._accounts.map((account) => account.previousHash ?? null);
77
96
  const payload_hashes = assertEx(await this.getPayloadHashes(), "Missing payload_hashes");
78
97
  const payload_schemas = assertEx(this._payload_schemas, "Missing payload_schemas");
@@ -153,12 +172,15 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder {
153
172
  ${JSON.stringify(payload, null, 2)}`;
154
173
  }
155
174
  };
175
+ __name(_BoundWitnessBuilder, "BoundWitnessBuilder");
176
+ __publicField(_BoundWitnessBuilder, "_buildMutex", new Mutex());
177
+ var BoundWitnessBuilder = _BoundWitnessBuilder;
156
178
 
157
179
  // src/Query/QueryBoundWitnessBuilder.ts
158
180
  import { assertEx as assertEx2 } from "@xylabs/assert";
159
181
  import { QueryBoundWitnessSchema } from "@xyo-network/boundwitness-model";
160
182
  import { PayloadWrapper as PayloadWrapper2 } from "@xyo-network/payload-wrapper";
161
- var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
183
+ var _QueryBoundWitnessBuilder = class _QueryBoundWitnessBuilder extends BoundWitnessBuilder {
162
184
  _query;
163
185
  async hashableFields() {
164
186
  var _a;
@@ -174,6 +196,8 @@ var QueryBoundWitnessBuilder = class extends BoundWitnessBuilder {
174
196
  return this;
175
197
  }
176
198
  };
199
+ __name(_QueryBoundWitnessBuilder, "QueryBoundWitnessBuilder");
200
+ var QueryBoundWitnessBuilder = _QueryBoundWitnessBuilder;
177
201
 
178
202
  // src/Query/QueryBoundWitnessWrapper.ts
179
203
  import { assertEx as assertEx3 } from "@xylabs/assert";
@@ -181,7 +205,7 @@ import { compact } from "@xylabs/lodash";
181
205
  import { BoundWitnessWrapper as BoundWitnessWrapper2 } from "@xyo-network/boundwitness-wrapper";
182
206
  import { PayloadHasher as PayloadHasher2 } from "@xyo-network/hash";
183
207
  import { PayloadWrapper as PayloadWrapper3 } from "@xyo-network/payload-wrapper";
184
- var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
208
+ var _QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitnessWrapper2 {
185
209
  _payloadsWithoutQuery;
186
210
  _query;
187
211
  _resultSet;
@@ -203,15 +227,12 @@ var QueryBoundWitnessWrapper = class _QueryBoundWitnessWrapper extends BoundWitn
203
227
  return assertEx3(this._query, `Missing Query [${this.boundwitness}]`);
204
228
  }
205
229
  async getWrappedPayloads() {
206
- this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact(
207
- (await PayloadHasher2.filterExclude(
208
- (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),
209
- this.payload().query
210
- )).map((payload) => PayloadWrapper3.wrap(payload))
211
- );
230
+ this._payloadsWithoutQuery = this._payloadsWithoutQuery ?? compact((await PayloadHasher2.filterExclude((await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()), this.payload().query)).map((payload) => PayloadWrapper3.wrap(payload)));
212
231
  return this._payloadsWithoutQuery;
213
232
  }
214
233
  };
234
+ __name(_QueryBoundWitnessWrapper, "QueryBoundWitnessWrapper");
235
+ var QueryBoundWitnessWrapper = _QueryBoundWitnessWrapper;
215
236
  export {
216
237
  BoundWitnessBuilder,
217
238
  QueryBoundWitnessBuilder,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadWrapper","assertEx","PayloadWrapper","assertEx","BoundWitnessWrapper","PayloadHasher","PayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts","../../src/Query/QueryBoundWitnessWrapper.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport { Logger } from '@xylabs/logger'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher, sortFields } from '@xyo-network/hash'\nimport { PayloadWrapper } from '@xyo-network/payload'\nimport { ModuleError, Payload } from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport interface BoundWitnessBuilderConfig {\n /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */\n /** @deprecated We will be removing support for inlinePayloads soon */\n readonly inlinePayloads?: boolean\n /** @deprecated We will be removing support for meta soon */\n readonly meta?: boolean\n /** @deprecated We will be removing support for timestamp soon */\n readonly timestamp?: boolean\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness<{ schema: string }> = BoundWitness, TPayload extends Payload = Payload> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[] = []\n private _errorHashes: string[] | undefined\n private _errors: ModuleError[] = []\n private _payloadHashes: string[] | undefined\n private _payloadSchemas: string[] | undefined\n private _payloads: TPayload[] = []\n private _sourceQuery: string | undefined\n private _timestamp = Date.now()\n\n constructor(\n readonly config: BoundWitnessBuilderConfig = { inlinePayloads: false },\n protected readonly logger?: Logger,\n ) {}\n\n private get _payload_schemas(): string[] {\n return (\n this._payloadSchemas ??\n this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n async build(meta = false): Promise<[TBoundWitness, TPayload[], ModuleError[]]> {\n if (meta) {\n console.log('BoundWitnessBuilder: Calling build with meta=true will be disallowed soon')\n }\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const hashableFields = await this.hashableFields()\n const _hash = await 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 for (const error of errors ?? []) {\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) =>\n account.addressBytes ? hexFromArrayBuffer(account.addressBytes, { prefix: false }) : undefined,\n )\n const previous_hashes = this._accounts.map((account) => account.previousHash ?? null)\n const payload_hashes = assertEx(await this.getPayloadHashes(), 'Missing payload_hashes')\n const payload_schemas = assertEx(this._payload_schemas, 'Missing payload_schemas')\n const result: TBoundWitness = {\n addresses: assertEx(addresses, 'Missing addresses'),\n payload_hashes,\n payload_schemas,\n previous_hashes,\n schema: BoundWitnessSchema,\n } as TBoundWitness\n\n assertEx(result.payload_hashes?.length === result.payload_schemas?.length, 'Payload hash/schema mismatch')\n\n assertEx(!result.payload_hashes.some((hash) => !hash), () => 'nulls found in hashes')\n\n assertEx(!result.payload_schemas.some((schema) => !schema), 'nulls found in schemas')\n\n if (this.config.timestamp ?? true) {\n result.timestamp = this._timestamp\n }\n\n if (this._sourceQuery) {\n result.sourceQuery = this._sourceQuery\n }\n\n return result\n }\n\n hashes(hashes: 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 if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n sourceQuery(hash?: string) {\n this._sourceQuery = hash\n return this\n }\n\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async signatures(_hash: string, previousHashes: (string | ArrayBuffer | undefined)[]): Promise<string[]> {\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map((ph) => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async getPayloadHashes(): Promise<string[]> {\n return this._payloadHashes ?? (await Promise.all(this._payloads.map((payload) => PayloadHasher.hashAsync(payload))))\n }\n\n private inlinePayloads() {\n console.log('BoundWitnessBuilder: Using inlinePayloads will soon be disallowed')\n\n return this._payloads.map<TPayload>((payload, index) => {\n return {\n ...payload,\n schema: this._payload_schemas[index],\n }\n })\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { QueryBoundWitness, QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { BoundWitnessBuilder } from '../Builder'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: PayloadWrapper<TQuery> | undefined\n\n override async hashableFields(): Promise<TBoundWitness> {\n return {\n ...(await super.hashableFields()),\n query: assertEx(await this._query?.hashAsync(), 'No Query Specified'),\n schema: QueryBoundWitnessSchema,\n }\n }\n\n query<T extends TQuery>(query: T) {\n this._query = PayloadWrapper.wrap(query)\n this.payload(this._query.payload())\n return this\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { compact } from '@xylabs/lodash'\nimport { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { Payload, PayloadSetPayload, Query } from '@xyo-network/payload-model'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nexport class QueryBoundWitnessWrapper<T extends Query = Query> extends BoundWitnessWrapper<QueryBoundWitness> {\n private _payloadsWithoutQuery: PayloadWrapper<Payload>[] | undefined\n private _query: T | undefined\n private _resultSet: PayloadSetPayload | undefined\n\n private isQueryBoundWitnessWrapper = true\n\n static parseQuery<T extends Query = Query>(obj: unknown, payloads?: Payload[]): QueryBoundWitnessWrapper<T> {\n assertEx(!Array.isArray(obj), 'Array can not be converted to QueryBoundWitnessWrapper')\n switch (typeof obj) {\n case 'object': {\n const castWrapper = obj as QueryBoundWitnessWrapper<T>\n const wrapper = castWrapper?.isQueryBoundWitnessWrapper ? castWrapper : new QueryBoundWitnessWrapper<T>(obj as QueryBoundWitness, payloads)\n /*if (!wrapper.valid) {\n console.warn(`Parsed invalid QueryBoundWitness ${JSON.stringify(wrapper.errors.map((error) => error.message))}`)\n }*/\n return wrapper\n }\n }\n throw new Error(`Unable to parse [${typeof obj}]`)\n }\n\n async getQuery(): Promise<T> {\n const payloadMap = await this.allPayloadMap()\n this._query = this._query ?? (payloadMap[this.boundwitness.query] as T | undefined)\n return assertEx(this._query, `Missing Query [${this.boundwitness}]`)\n }\n\n override async getWrappedPayloads(): Promise<PayloadWrapper<Payload>[]> {\n this._payloadsWithoutQuery =\n this._payloadsWithoutQuery ??\n compact(\n (\n await PayloadHasher.filterExclude(\n (await super.getWrappedPayloads()).map((wrapper) => wrapper.payload()),\n this.payload().query,\n )\n ).map((payload) => PayloadWrapper.wrap(payload)),\n )\n return this._payloadsWithoutQuery\n }\n}\n"],"mappings":"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","names":["toArrayBuffer","toUint8Array","assertEx","hexFromArrayBuffer","BoundWitnessSchema","BoundWitnessWrapper","PayloadHasher","sortFields","PayloadWrapper","Mutex","BoundWitnessBuilder","_accounts","_errorHashes","_errors","_payloadHashes","_payloadSchemas","_payloads","_sourceQuery","_timestamp","constructor","config","inlinePayloads","logger","Date","now","_payload_schemas","map","payload","assertEx","schema","missingSchemaMessage","build","meta","console","log","_buildMutex","runExclusive","hashableFields","_hash","BoundWitnessWrapper","hashAsync","previousHashes","account","previousHash","ret","_signatures","signatures","bwWithMeta","_client","anyRet","error","unwrappedPayload","PayloadWrapper","unwrap","undefined","push","sortFields","errors","addresses","addressBytes","hexFromArrayBuffer","prefix","previous_hashes","payload_hashes","getPayloadHashes","payload_schemas","result","BoundWitnessSchema","length","some","hash","timestamp","sourceQuery","hashes","payloads","witness","witnesses","accounts","toArrayBuffer","previousHashesBytes","ph","toUint8Array","Promise","all","index","sign","PayloadHasher","JSON","stringify","Mutex","assertEx","QueryBoundWitnessSchema","PayloadWrapper","QueryBoundWitnessBuilder","BoundWitnessBuilder","_query","hashableFields","query","assertEx","hashAsync","schema","QueryBoundWitnessSchema","PayloadWrapper","wrap","payload","assertEx","compact","BoundWitnessWrapper","PayloadHasher","PayloadWrapper","QueryBoundWitnessWrapper","BoundWitnessWrapper","_payloadsWithoutQuery","_query","_resultSet","isQueryBoundWitnessWrapper","parseQuery","obj","payloads","assertEx","Array","isArray","castWrapper","wrapper","Error","getQuery","payloadMap","allPayloadMap","boundwitness","query","getWrappedPayloads","compact","PayloadHasher","filterExclude","map","payload","PayloadWrapper","wrap"]}
package/package.json CHANGED
@@ -16,22 +16,22 @@
16
16
  "@xylabs/hex": "^2.13.20",
17
17
  "@xylabs/lodash": "^2.13.20",
18
18
  "@xylabs/logger": "^2.13.20",
19
- "@xyo-network/account-model": "~2.84.19",
20
- "@xyo-network/boundwitness-model": "~2.84.19",
21
- "@xyo-network/boundwitness-validator": "~2.84.19",
22
- "@xyo-network/boundwitness-wrapper": "~2.84.19",
23
- "@xyo-network/hash": "~2.84.19",
24
- "@xyo-network/payload": "~2.84.19",
25
- "@xyo-network/payload-model": "~2.84.19",
26
- "@xyo-network/payload-wrapper": "~2.84.19",
19
+ "@xyo-network/account-model": "~2.85.1",
20
+ "@xyo-network/boundwitness-model": "~2.85.1",
21
+ "@xyo-network/boundwitness-validator": "~2.85.1",
22
+ "@xyo-network/boundwitness-wrapper": "~2.85.1",
23
+ "@xyo-network/hash": "~2.85.1",
24
+ "@xyo-network/payload": "~2.85.1",
25
+ "@xyo-network/payload-model": "~2.85.1",
26
+ "@xyo-network/payload-wrapper": "~2.85.1",
27
27
  "async-mutex": "^0.4.0"
28
28
  },
29
29
  "description": "Primary SDK for using XYO Protocol 2.0",
30
30
  "devDependencies": {
31
31
  "@xylabs/ts-scripts-yarn3": "^3.2.25",
32
32
  "@xylabs/tsconfig": "^3.2.25",
33
- "@xyo-network/account": "~2.84.19",
34
- "@xyo-network/object": "~2.84.19",
33
+ "@xyo-network/account": "~2.85.1",
34
+ "@xyo-network/object": "~2.85.1",
35
35
  "typescript": "^5.3.3"
36
36
  },
37
37
  "exports": {
@@ -72,6 +72,6 @@
72
72
  },
73
73
  "sideEffects": false,
74
74
  "types": "dist/node/index.d.ts",
75
- "version": "2.84.19",
75
+ "version": "2.85.1",
76
76
  "type": "module"
77
77
  }