@xyo-network/boundwitness-builder 3.4.1 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,7 +32,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
32
32
  constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>);
33
33
  protected get addresses(): Address[];
34
34
  protected get payloadSchemas(): string[];
35
- protected get previousHashBuffers(): (ArrayBuffer | null)[];
35
+ protected get previousHashBuffers(): (ArrayBufferLike | null)[];
36
36
  protected get previousHashes(): (Hash | null)[];
37
37
  protected get timestamp(): number;
38
38
  static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
@@ -1 +1 @@
1
- {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // src/Builder.ts
2
- import { toArrayBuffer, toUint8Array } from "@xylabs/arraybuffer";
2
+ import { toArrayBuffer } from "@xylabs/arraybuffer";
3
3
  import { assertEx } from "@xylabs/assert";
4
4
  import { hexFromArrayBuffer } from "@xylabs/hex";
5
5
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
@@ -115,7 +115,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
115
115
  }
116
116
  static async signatures(accounts, hash, previousHashes) {
117
117
  const hashBytes = toArrayBuffer(hash);
118
- const previousHashesBytes = previousHashes?.map((ph) => ph ? toUint8Array(ph) : void 0);
118
+ const previousHashesBytes = previousHashes?.map((ph) => ph ? toArrayBuffer(ph) : void 0);
119
119
  return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))));
120
120
  }
121
121
  static validateLinkingFields(bw) {
@@ -223,7 +223,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
223
223
  async signatures(_hash, previousHashes) {
224
224
  uniqueAccounts(this._accounts, true);
225
225
  const hash = toArrayBuffer(_hash);
226
- const previousHashesBytes = previousHashes.map((ph) => ph ? toUint8Array(ph) : void 0);
226
+ const previousHashesBytes = previousHashes.map((ph) => ph ? toArrayBuffer(ph) : void 0);
227
227
  return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))));
228
228
  }
229
229
  async linkingFields() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AnyObject, JsonObject } from '@xylabs/object'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport type {\n PayloadBuilderOptions, WithoutMeta, WithoutSchema,\n} from '@xyo-network/payload-builder'\nimport { PayloadBuilder, PayloadBuilderBase } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema, WithMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const {\n accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination,\n } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promise<WithoutMeta<T>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes, timestamp,\n } as WithoutSchema<WithoutMeta<T>>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n stamp = true,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta = await super.metaFields(dataHash, otherMeta, stamp)\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, () => 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map(ph => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map(payload => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map(error => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(\n dataHash,\n this._$meta,\n stamp,\n this._accounts,\n this.previousHashes,\n this._destination,\n this._sourceQuery,\n )\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map(ph => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _additional?: Hash[]\n private _query: WithMeta<TQuery> | undefined\n\n async additional(additional: Payload[]) {\n this._additional = await PayloadBuilder.dataHashes(additional)\n return this\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, () => 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n if (this._additional) {\n fields.additional = this._additional\n }\n return fields\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n this.payload(this._query)\n return this\n }\n}\n"],"mappings":";AAAA,SAAS,eAAe,oBAAoB;AAC5C,SAAS,gBAAgB;AAEzB,SAAS,0BAA0B;AAInC,SAAS,0BAA0B;AACnC,SAAS,mBAAmB,kBAAkB;AAI9C,SAAS,gBAAgB,0BAA0B;AAInD,SAAS,aAAa;AAetB,IAAM,iBAAiB,CAAC,UAA6B,eAAe,UAAU;AAC5E,QAAM,YAAY,oBAAI,IAAa;AACnC,aAAW,WAAW,UAAU;AAC9B,QAAI,UAAU,IAAI,QAAQ,OAAO,GAAG;AAClC,UAAI,cAAc;AAChB,cAAM,IAAI,MAAM,mBAAmB;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AACA,cAAU,IAAI,QAAQ,OAAO;AAAA,EAC/B;AACA,SAAO;AACT;AAEO,IAAM,sBAAN,MAAM,6BAAmH,mBAG9H;AAAA,EACA,OAAwB,cAAc,IAAI,MAAM;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAyB,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,SAA+D;AACzE,UAAM,EAAE,GAAG,SAAS,QAAQ,mBAAmB,CAAC;AAChD,UAAM;AAAA,MACJ;AAAA,MAAU;AAAA,MAAe;AAAA,MAAgB;AAAA,MAAU;AAAA,MAAa;AAAA,MAAW;AAAA,IAC7E,IAAI,WAAW,CAAC;AAChB,SAAK,YAAY,YAAY,CAAC;AAC9B,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,SAAK,YAAY,YAAY,CAAC;AAC9B,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,aAAa,aAAa;AAAA,EACjC;AAAA,EAEA,IAAc,YAAuB;AACnC,mBAAe,KAAK,WAAW,IAAI;AACnC,WAAO,KAAK,UAAU,IAAI,aAAW,QAAQ,QAAQ,YAAY,CAAC;AAAA,EACpE;AAAA,EAEA,IAAc,iBAA2B;AACvC,WACE,KAAK,mBACF,KAAK,UAAU,IAAI,CAAC,YAAY;AACjC,aAAO,SAAS,QAAQ,QAAQ,MAAM,KAAK,qBAAqB,OAAO,CAAC;AAAA,IAC1E,CAAC;AAAA,EAEL;AAAA,EAEA,IAAc,sBAA8C;AAC1D,WAAO,KAAK,UAAU,IAAI,aAAW,QAAQ,qBAAqB,IAAI;AAAA,EACxE;AAAA,EAEA,IAAc,iBAAkC;AAC9C,WAAO,KAAK,UAAU,IAAI,aAAW,QAAQ,gBAAgB,IAAI;AAAA,EACnE;AAAA,EAEA,IAAc,YAAoB;AAChC,WAAQ,KAAK,aAAa,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa,KAAK,IAAI;AAAA,EAC7F;AAAA,EAEA,OAAO,aAAqC,SAAY,SAAkB;AACxE,UAAM,QAAQ,QAAQ,UAAU,QAAQ,OAAO;AAC/C,QAAI,UAAU,IAAI;AAChB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,MAA0C,SAAoD;AACzG,WAAO,MAAM,IAAI,qBAAoB,OAAO,EAAE,MAAM;AAAA,EACtD;AAAA,EAEA,aAAsB,mBACpB,QACA,QACyB;AACzB,WAAO,MAAM,mBAAmB,mBAAmB,QAAQ,SAAS,kBAAkB,MAAM,IAAI,MAAS;AAAA,EAC3G;AAAA,EAEA,OAAO,aAAqC,cAAiB,SAAkB;AAC7E,WAAO,aAAa,gBAAgB,KAAK,aAAa,cAAc,OAAO,CAAC,GAAG,YAAY;AAAA,EAC7F;AAAA,EAEA,aAAuB,cACrB,UACA,UACA,YAAY,KAAK,IAAI,GACrB;AACA,UAAM,YAAY,SAAS,IAAI,aAAW,mBAAmB,QAAQ,cAAc,EAAE,QAAQ,MAAM,CAAC,CAAC;AACrG,UAAM,kBAAkB,SAAS,IAAI,aAAW,QAAQ,gBAAgB,IAAI;AAC5E,UAAM,iBAAiB,WAAW,MAAM,eAAe,WAAW,QAAQ,IAAI,CAAC;AAC/E,UAAM,kBAAkB,UAAU,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM;AAC5D,WAAO;AAAA,MACL;AAAA,MAAW;AAAA,MAAgB;AAAA,MAAiB;AAAA,MAAiB;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,aAAgC,WAC9B,UACA,WACA,QAAQ,MACR,UACA,gBACA,aACA,aACqB;AACrB,UAAM,OAAO,MAAM,MAAM,WAAW,UAAU,WAAW,KAAK;AAE9D,QAAI,UAAU,UAAU,gBAAgB,QAAQ;AAC9C,eAAS,SAAS,WAAW,eAAe,QAAQ,MAAM,mDAAmD;AAC7G,WAAK,aAAa,MAAM,KAAK,WAAW,UAAU,UAAU,cAAc;AAAA,IAC5E;AAEA,QAAI,aAAa;AACf,WAAK,cAAc;AAAA,IACrB;AAEA,QAAI,aAAa;AACf,WAAK,cAAc;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAiB,UAAkC,SAAY,SAAkB;AAC/E,WAAO,QAAQ,MAAM,WAAW,KAAK,aAAa,SAAS,OAAO,CAAC;AAAA,EACrE;AAAA,EAEA,aAAuB,WAAW,UAA6B,MAAY,gBAAkE;AAC3I,UAAM,YAAY,cAAc,IAAI;AACpC,UAAM,sBAAsB,gBAAgB,IAAI,QAAO,KAAK,aAAa,EAAE,IAAI,MAAU;AACzF,WAAO,MAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,SAAS,UAAU,mBAAmB,MAAM,QAAQ,KAAK,WAAW,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAC;AAAA,EAChJ;AAAA,EAEA,OAAe,sBAAsB,IAA8D;AACjG,aAAS,GAAG,gBAAgB,WAAW,GAAG,iBAAiB,QAAQ,MAAM,8BAA8B;AACvG,aAAS,CAAC,GAAG,eAAe,KAAK,UAAQ,CAAC,IAAI,GAAG,MAAM,uBAAuB;AAC9E,aAAS,CAAC,GAAG,gBAAgB,KAAK,YAAU,CAAC,MAAM,GAAG,MAAM,wBAAwB;AAAA,EACtF;AAAA,EAEA,MAAM,QAA2F;AAC/F,WAAO,MAAM,qBAAoB,YAAY,aAAa,YAAY;AACpE,YAAM,qBAAsB,MAAM,KAAK,mBAAmB;AAC1D,YAAM,SAAS,MAAM,eAAe,MAAM,kBAAkB,GAAG;AAC/D,YAAM,QAAQ,MAAM,KAAK,WAAW,KAAK;AAEzC,YAAM,MAAM;AAAA,QACV,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,QACL;AAAA,QACA,MAAM,QAAQ,IAAI,KAAK,WAAW,IAAI,aAAW,eAAe,MAAM,OAAO,CAAC,CAAC;AAAA,QAC/E,MAAM,QAAQ,IAAI,KAAK,SAAS,IAAI,WAAS,eAAe,MAAM,KAAK,CAAC,CAAC;AAAA,MAC3E;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAe,qBAA0D;AACvE,UAAM,SAAS,MAAM,KAAK,cAAc;AACxC,UAAM,SAAS,MAAM,qBAAoB,mBAAkC,KAAK,SAAS,MAAM;AAE/F,yBAAoB,sBAAsB,MAAM;AAEhD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAuB;AAC3B,aAAS,KAAK,iBAAiB,QAAW,MAAM,4CAA4C;AAC5F,QAAI,SAAS;AACX,WAAK,QAAQ,KAAK,SAAS,WAAW,OAAO,CAAC,CAAC;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAiC;AACtC,QAAI,QAAQ;AACV,iBAAW,SAAS,QAAQ;AAC1B,YAAI,UAAU,MAAM;AAClB,eAAK,MAAM,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,QAAgB,QAAkB;AACvC,aAAS,KAAK,SAAS,WAAW,GAAG,MAAM,8CAA8C;AACzF,SAAK,iBAAiB;AACtB,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAAoB;AAC1B,aAAS,KAAK,mBAAmB,QAAW,MAAM,8CAA8C;AAChG,QAAI,SAAS;AACX,WAAK,UAAU,KAAK,SAAS,WAAqB,OAAO,CAAC,CAAC;AAAA,IAC7D;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,OAAO,SAA0B;AAC/B,mBAAe,CAAC,GAAG,KAAK,WAAW,OAAO,GAAG,IAAI;AACjD,SAAK,WAAW,KAAK,OAAO;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,UAA6B;AACnC,mBAAe,CAAC,GAAG,KAAK,WAAW,GAAG,QAAQ,GAAG,IAAI;AACrD,SAAK,WAAW,KAAK,GAAG,QAAQ;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,OAAc;AACxB,SAAK,eAAe,OAAO,YAAY;AACvC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,QAAQ,SAA0B;AAChC,SAAK,WAAW,KAAK,OAAO;AAC5B,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,UAAU,UAA6B;AACrC,SAAK,WAAW,KAAK,GAAG,QAAQ;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,MAAyB,WAAW,UAAgB,QAAQ,MAA2B;AACrF,WAAO,MAAM,qBAAoB;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAgB,WAAW,OAAa,gBAAkE;AACxG,mBAAe,KAAK,WAAW,IAAI;AACnC,UAAM,OAAO,cAAc,KAAK;AAChC,UAAM,sBAAsB,eAAe,IAAI,QAAO,KAAK,aAAa,EAAE,IAAI,MAAU;AACxF,WAAO,MAAM,QAAQ,IAAI,KAAK,UAAU,IAAI,OAAO,SAAS,UAAU,mBAAmB,MAAM,QAAQ,KAAK,MAAM,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAC;AAAA,EACjJ;AAAA,EAEA,MAAc,gBAAgB;AAC5B,WAAO,MAAM,qBAAoB,cAA6B,KAAK,WAAW,KAAK,WAAW,KAAK,SAAS;AAAA,EAC9G;AAAA,EAEQ,qBAAqB,SAAkB;AAC7C,WAAO;AAAA,EAA4B,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,EACrE;AACF;;;ACnTA,SAAS,YAAAA,iBAAgB;AAGzB,SAAS,+BAA+B;AACxC,SAAS,kBAAAC,uBAAsB;AAOxB,IAAM,2BAAN,cAGG,oBAAmC;AAAA,EACnC;AAAA,EACA;AAAA,EAER,MAAM,WAAW,YAAuB;AACtC,SAAK,cAAc,MAAMC,gBAAe,WAAW,UAAU;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAe,qBAAsE;AACnF,UAAM,SAAS;AAAA,MACb,GAAI,MAAM,MAAM,mBAAmB;AAAA,MACnC,OAAOC,UAAS,KAAK,QAAQ,MAAM,oBAAoB,EAAE;AAAA,MACzD,QAAQ;AAAA,IACV;AACA,QAAI,KAAK,aAAa;AACpB,aAAO,aAAa,KAAK;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAwB,OAAU;AACtC,SAAK,SAAS,MAAMD,gBAAe,MAAM,KAAK;AAC9C,SAAK,QAAQ,KAAK,MAAM;AACxB,WAAO;AAAA,EACT;AACF;","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
1
+ {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AnyObject, JsonObject } from '@xylabs/object'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport type {\n PayloadBuilderOptions, WithoutMeta, WithoutSchema,\n} from '@xyo-network/payload-builder'\nimport { PayloadBuilder, PayloadBuilderBase } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema, WithMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const {\n accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination,\n } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promise<WithoutMeta<T>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes, timestamp,\n } as WithoutSchema<WithoutMeta<T>>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n stamp = true,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta = await super.metaFields(dataHash, otherMeta, stamp)\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, () => 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map(ph => (ph ? toArrayBuffer(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map(payload => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map(error => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(\n dataHash,\n this._$meta,\n stamp,\n this._accounts,\n this.previousHashes,\n this._destination,\n this._sourceQuery,\n )\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map(ph => (ph ? toArrayBuffer(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _additional?: Hash[]\n private _query: WithMeta<TQuery> | undefined\n\n async additional(additional: Payload[]) {\n this._additional = await PayloadBuilder.dataHashes(additional)\n return this\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, () => 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n if (this._additional) {\n fields.additional = this._additional\n }\n return fields\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
@@ -32,7 +32,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
32
32
  constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>);
33
33
  protected get addresses(): Address[];
34
34
  protected get payloadSchemas(): string[];
35
- protected get previousHashBuffers(): (ArrayBuffer | null)[];
35
+ protected get previousHashBuffers(): (ArrayBufferLike | null)[];
36
36
  protected get previousHashes(): (Hash | null)[];
37
37
  protected get timestamp(): number;
38
38
  static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
@@ -1 +1 @@
1
- {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // src/Builder.ts
2
- import { toArrayBuffer, toUint8Array } from "@xylabs/arraybuffer";
2
+ import { toArrayBuffer } from "@xylabs/arraybuffer";
3
3
  import { assertEx } from "@xylabs/assert";
4
4
  import { hexFromArrayBuffer } from "@xylabs/hex";
5
5
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
@@ -115,7 +115,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
115
115
  }
116
116
  static async signatures(accounts, hash, previousHashes) {
117
117
  const hashBytes = toArrayBuffer(hash);
118
- const previousHashesBytes = previousHashes?.map((ph) => ph ? toUint8Array(ph) : void 0);
118
+ const previousHashesBytes = previousHashes?.map((ph) => ph ? toArrayBuffer(ph) : void 0);
119
119
  return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))));
120
120
  }
121
121
  static validateLinkingFields(bw) {
@@ -223,7 +223,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
223
223
  async signatures(_hash, previousHashes) {
224
224
  uniqueAccounts(this._accounts, true);
225
225
  const hash = toArrayBuffer(_hash);
226
- const previousHashesBytes = previousHashes.map((ph) => ph ? toUint8Array(ph) : void 0);
226
+ const previousHashesBytes = previousHashes.map((ph) => ph ? toArrayBuffer(ph) : void 0);
227
227
  return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))));
228
228
  }
229
229
  async linkingFields() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AnyObject, JsonObject } from '@xylabs/object'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport type {\n PayloadBuilderOptions, WithoutMeta, WithoutSchema,\n} from '@xyo-network/payload-builder'\nimport { PayloadBuilder, PayloadBuilderBase } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema, WithMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const {\n accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination,\n } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promise<WithoutMeta<T>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes, timestamp,\n } as WithoutSchema<WithoutMeta<T>>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n stamp = true,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta = await super.metaFields(dataHash, otherMeta, stamp)\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, () => 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map(ph => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map(payload => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map(error => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(\n dataHash,\n this._$meta,\n stamp,\n this._accounts,\n this.previousHashes,\n this._destination,\n this._sourceQuery,\n )\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map(ph => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _additional?: Hash[]\n private _query: WithMeta<TQuery> | undefined\n\n async additional(additional: Payload[]) {\n this._additional = await PayloadBuilder.dataHashes(additional)\n return this\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, () => 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n if (this._additional) {\n fields.additional = this._additional\n }\n return fields\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
1
+ {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AnyObject, JsonObject } from '@xylabs/object'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport type {\n PayloadBuilderOptions, WithoutMeta, WithoutSchema,\n} from '@xyo-network/payload-builder'\nimport { PayloadBuilder, PayloadBuilderBase } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema, WithMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const {\n accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination,\n } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promise<WithoutMeta<T>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes, timestamp,\n } as WithoutSchema<WithoutMeta<T>>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n stamp = true,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta = await super.metaFields(dataHash, otherMeta, stamp)\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, () => 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map(ph => (ph ? toArrayBuffer(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map(payload => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map(error => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(\n dataHash,\n this._$meta,\n stamp,\n this._accounts,\n this.previousHashes,\n this._destination,\n this._sourceQuery,\n )\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map(ph => (ph ? toArrayBuffer(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _additional?: Hash[]\n private _query: WithMeta<TQuery> | undefined\n\n async additional(additional: Payload[]) {\n this._additional = await PayloadBuilder.dataHashes(additional)\n return this\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, () => 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n if (this._additional) {\n fields.additional = this._additional\n }\n return fields\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
@@ -32,7 +32,7 @@ export declare class BoundWitnessBuilder<TBoundWitness extends BoundWitness = Bo
32
32
  constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>);
33
33
  protected get addresses(): Address[];
34
34
  protected get payloadSchemas(): string[];
35
- protected get previousHashBuffers(): (ArrayBuffer | null)[];
35
+ protected get previousHashBuffers(): (ArrayBufferLike | null)[];
36
36
  protected get previousHashes(): (Hash | null)[];
37
37
  protected get timestamp(): number;
38
38
  static addressIndex<T extends BoundWitness>(payload: T, address: Address): number;
@@ -1 +1 @@
1
- {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/Builder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // src/Builder.ts
2
- import { toArrayBuffer, toUint8Array } from "@xylabs/arraybuffer";
2
+ import { toArrayBuffer } from "@xylabs/arraybuffer";
3
3
  import { assertEx } from "@xylabs/assert";
4
4
  import { hexFromArrayBuffer } from "@xylabs/hex";
5
5
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
@@ -115,7 +115,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
115
115
  }
116
116
  static async signatures(accounts, hash, previousHashes) {
117
117
  const hashBytes = toArrayBuffer(hash);
118
- const previousHashesBytes = previousHashes?.map((ph) => ph ? toUint8Array(ph) : void 0);
118
+ const previousHashesBytes = previousHashes?.map((ph) => ph ? toArrayBuffer(ph) : void 0);
119
119
  return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))));
120
120
  }
121
121
  static validateLinkingFields(bw) {
@@ -223,7 +223,7 @@ var BoundWitnessBuilder = class _BoundWitnessBuilder extends PayloadBuilderBase
223
223
  async signatures(_hash, previousHashes) {
224
224
  uniqueAccounts(this._accounts, true);
225
225
  const hash = toArrayBuffer(_hash);
226
- const previousHashesBytes = previousHashes.map((ph) => ph ? toUint8Array(ph) : void 0);
226
+ const previousHashesBytes = previousHashes.map((ph) => ph ? toArrayBuffer(ph) : void 0);
227
227
  return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))));
228
228
  }
229
229
  async linkingFields() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AnyObject, JsonObject } from '@xylabs/object'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport type {\n PayloadBuilderOptions, WithoutMeta, WithoutSchema,\n} from '@xyo-network/payload-builder'\nimport { PayloadBuilder, PayloadBuilderBase } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema, WithMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const {\n accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination,\n } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBuffer | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promise<WithoutMeta<T>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes, timestamp,\n } as WithoutSchema<WithoutMeta<T>>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n stamp = true,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta = await super.metaFields(dataHash, otherMeta, stamp)\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, () => 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map(ph => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map(payload => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map(error => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(\n dataHash,\n this._$meta,\n stamp,\n this._accounts,\n this.previousHashes,\n this._destination,\n this._sourceQuery,\n )\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map(ph => (ph ? toUint8Array(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _additional?: Hash[]\n private _query: WithMeta<TQuery> | undefined\n\n async additional(additional: Payload[]) {\n this._additional = await PayloadBuilder.dataHashes(additional)\n return this\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, () => 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n if (this._additional) {\n fields.additional = this._additional\n }\n return fields\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
1
+ {"version":3,"sources":["../../src/Builder.ts","../../src/Query/QueryBoundWitnessBuilder.ts"],"sourcesContent":["import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport { hexFromArrayBuffer } from '@xylabs/hex'\nimport type { AnyObject, JsonObject } from '@xylabs/object'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { removeEmptyFields, sortFields } from '@xyo-network/hash'\nimport type {\n PayloadBuilderOptions, WithoutMeta, WithoutSchema,\n} from '@xyo-network/payload-builder'\nimport { PayloadBuilder, PayloadBuilderBase } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema, WithMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nexport type GeneratedBoundWitnessFields = 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'\n\nexport interface BoundWitnessBuilderOptions<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload>\n extends Omit<PayloadBuilderOptions<Omit<TBoundWitness, GeneratedBoundWitnessFields>>, 'schema'> {\n readonly accounts?: AccountInstance[]\n readonly destination?: Hash[]\n readonly payloadHashes?: TBoundWitness['payload_hashes']\n readonly payloadSchemas?: TBoundWitness['payload_schemas']\n readonly payloads?: TPayload[]\n readonly sourceQuery?: Hash\n readonly timestamp?: number\n}\n\nconst uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n const addresses = new Set<Address>()\n for (const account of accounts) {\n if (addresses.has(account.address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addresses.add(account.address)\n }\n return true\n}\n\nexport class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitness, TPayload extends Payload = Payload> extends PayloadBuilderBase<\n Omit<TBoundWitness, GeneratedBoundWitnessFields>,\n BoundWitnessBuilderOptions<TBoundWitness> & { schema: BoundWitnessSchema }\n> {\n private static readonly _buildMutex = new Mutex()\n private _accounts: AccountInstance[]\n private _destination?: Hash[]\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[]\n private _sourceQuery?: Hash\n private _timestamp: boolean | number\n\n constructor(options?: BoundWitnessBuilderOptions<TBoundWitness, TPayload>) {\n super({ ...options, schema: BoundWitnessSchema })\n const {\n accounts, payloadHashes, payloadSchemas, payloads, sourceQuery, timestamp, destination,\n } = options ?? {}\n this._accounts = accounts ?? []\n this._payloadHashes = payloadHashes\n this._payloadSchemas = payloadSchemas\n this._payloads = payloads ?? []\n this._sourceQuery = sourceQuery\n this._destination = destination\n this._timestamp = timestamp ?? true\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBuffers(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n protected get timestamp(): number {\n return (this._timestamp = typeof this._timestamp === 'number' ? this._timestamp : Date.now())\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static async build<TBoundWitness extends BoundWitness>(options: BoundWitnessBuilderOptions<TBoundWitness>) {\n return await new BoundWitnessBuilder(options).build()\n }\n\n static override async dataHashableFields<T extends Payload = Payload<AnyObject>>(\n schema: string,\n fields?: WithoutSchema<WithoutMeta<T>>,\n ): Promise<WithoutMeta<T>> {\n return await PayloadBuilderBase.dataHashableFields(schema, fields ? removeEmptyFields(fields) : undefined)\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return boundWitness.previous_hashes[this.addressIndex(boundWitness, address)]?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness = BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n timestamp = Date.now(),\n ) {\n const addresses = accounts.map(account => hexFromArrayBuffer(account.addressBytes, { prefix: false }))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await PayloadBuilder.dataHashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema)\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes, timestamp,\n } as WithoutSchema<WithoutMeta<T>>\n }\n\n protected static override async metaFields(\n dataHash: Hash,\n otherMeta?: JsonObject,\n stamp = true,\n accounts?: AccountInstance[],\n previousHashes?: (Hash | null)[],\n destination?: Address[],\n sourceQuery?: Hash,\n ): Promise<JsonObject> {\n const meta = await super.metaFields(dataHash, otherMeta, stamp)\n\n if (accounts?.length && previousHashes?.length) {\n assertEx(accounts.length === previousHashes.length, () => 'accounts and previousHashes must have same length')\n meta.signatures = await this.signatures(accounts, dataHash, previousHashes)\n }\n\n if (sourceQuery) {\n meta.sourceQuery = sourceQuery\n }\n\n if (destination) {\n meta.destination = destination\n }\n\n return meta\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$meta.signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n const hashBytes = toArrayBuffer(hash)\n const previousHashesBytes = previousHashes?.map(ph => (ph ? toArrayBuffer(ph) : undefined))\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))\n }\n\n private static validateLinkingFields(bw: Pick<BoundWitness, 'payload_hashes' | 'payload_schemas'>) {\n assertEx(bw.payload_hashes?.length === bw.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!bw.payload_hashes.some(hash => !hash), () => 'nulls found in hashes')\n assertEx(!bw.payload_schemas.some(schema => !schema), () => 'nulls found in schemas')\n }\n\n async build(): Promise<[WithMeta<TBoundWitness>, WithMeta<TPayload>[], WithMeta<ModuleError>[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = (await this.dataHashableFields()) as TBoundWitness\n const $hash = (await PayloadBuilder.build(dataHashableFields)).$hash\n const $meta = await this.metaFields($hash)\n\n const ret = {\n ...dataHashableFields,\n $hash,\n $meta,\n } as WithMeta<TBoundWitness>\n return [\n ret,\n await Promise.all(this._payloads?.map(payload => PayloadBuilder.build(payload))),\n await Promise.all(this._errors?.map(error => PayloadBuilder.build(error))),\n ]\n })\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = await this.linkingFields()\n const result = await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n\n BoundWitnessBuilder.validateLinkingFields(result)\n\n return result as Omit<TBoundWitness, '$meta' | '$hash'>\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(query?: Hash) {\n this._sourceQuery = query?.toLowerCase() as Hash\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected override async metaFields(dataHash: Hash, stamp = true): Promise<JsonObject> {\n return await BoundWitnessBuilder.metaFields(\n dataHash,\n this._$meta,\n stamp,\n this._accounts,\n this.previousHashes,\n this._destination,\n this._sourceQuery,\n )\n }\n\n protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {\n uniqueAccounts(this._accounts, true)\n const hash = toArrayBuffer(_hash)\n const previousHashesBytes = previousHashes.map(ph => (ph ? toArrayBuffer(ph) : undefined))\n return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))\n }\n\n private async linkingFields() {\n return await BoundWitnessBuilder.linkingFields<TBoundWitness>(this._accounts, this._payloads, this.timestamp)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { QueryBoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type {\n Payload, Query, WithMeta,\n} from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../Builder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _additional?: Hash[]\n private _query: WithMeta<TQuery> | undefined\n\n async additional(additional: Payload[]) {\n this._additional = await PayloadBuilder.dataHashes(additional)\n return this\n }\n\n override async dataHashableFields(): Promise<Omit<TBoundWitness, '$hash' | '$meta'>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: assertEx(this._query, () => 'No Query Specified').$hash,\n schema: QueryBoundWitnessSchema,\n } as Omit<TBoundWitness, '$hash' | '$meta'>\n if (this._additional) {\n fields.additional = this._additional\n }\n return fields\n }\n\n async query<T extends TQuery>(query: T) {\n this._query = await PayloadBuilder.build(query)\n this.payload(this._query)\n return this\n }\n}\n"],"mappings":"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","names":["assertEx","PayloadBuilder","PayloadBuilder","assertEx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/boundwitness-builder",
3
- "version": "3.4.1",
3
+ "version": "3.5.0",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,24 +29,26 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/arraybuffer": "^4.3.13",
33
- "@xylabs/assert": "^4.3.13",
34
- "@xylabs/hex": "^4.3.13",
35
- "@xylabs/object": "^4.3.13",
36
- "@xyo-network/account-model": "^3.4.1",
37
- "@xyo-network/boundwitness-model": "^3.4.1",
38
- "@xyo-network/hash": "^3.4.1",
39
- "@xyo-network/payload": "^3.4.1",
40
- "@xyo-network/payload-builder": "^3.4.1",
41
- "@xyo-network/payload-model": "^3.4.1",
32
+ "@xylabs/arraybuffer": "^4.4.4",
33
+ "@xylabs/assert": "^4.4.4",
34
+ "@xylabs/hex": "^4.4.4",
35
+ "@xylabs/object": "^4.4.4",
36
+ "@xyo-network/account-model": "^3.5.0",
37
+ "@xyo-network/boundwitness-model": "^3.5.0",
38
+ "@xyo-network/hash": "^3.5.0",
39
+ "@xyo-network/payload": "^3.5.0",
40
+ "@xyo-network/payload-builder": "^3.5.0",
41
+ "@xyo-network/payload-model": "^3.5.0",
42
42
  "async-mutex": "^0.5.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@xylabs/object": "^4.3.13",
45
+ "@xylabs/object": "^4.4.4",
46
46
  "@xylabs/ts-scripts-yarn3": "^4.2.4",
47
47
  "@xylabs/tsconfig": "^4.2.4",
48
- "@xyo-network/account": "^3.4.1",
49
- "typescript": "^5.6.3"
48
+ "@xylabs/vitest-extended": "^4.4.4",
49
+ "@xyo-network/account": "^3.5.0",
50
+ "typescript": "^5.7.2",
51
+ "vitest": "^2.1.5"
50
52
  },
51
53
  "publishConfig": {
52
54
  "access": "public"
package/src/Builder.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { toArrayBuffer, toUint8Array } from '@xylabs/arraybuffer'
1
+ import { toArrayBuffer } from '@xylabs/arraybuffer'
2
2
  import { assertEx } from '@xylabs/assert'
3
3
  import type { Address, Hash } from '@xylabs/hex'
4
4
  import { hexFromArrayBuffer } from '@xylabs/hex'
@@ -86,7 +86,7 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitne
86
86
  )
87
87
  }
88
88
 
89
- protected get previousHashBuffers(): (ArrayBuffer | null)[] {
89
+ protected get previousHashBuffers(): (ArrayBufferLike | null)[] {
90
90
  return this._accounts.map(account => account.previousHashBytes ?? null)
91
91
  }
92
92
 
@@ -168,7 +168,7 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitne
168
168
 
169
169
  protected static async signatures(accounts: AccountInstance[], hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {
170
170
  const hashBytes = toArrayBuffer(hash)
171
- const previousHashesBytes = previousHashes?.map(ph => (ph ? toUint8Array(ph) : undefined))
171
+ const previousHashesBytes = previousHashes?.map(ph => (ph ? toArrayBuffer(ph) : undefined))
172
172
  return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hashBytes, previousHashesBytes[index]))))
173
173
  }
174
174
 
@@ -294,7 +294,7 @@ export class BoundWitnessBuilder<TBoundWitness extends BoundWitness = BoundWitne
294
294
  protected async signatures(_hash: Hash, previousHashes: (Hash | ArrayBuffer | null)[]): Promise<string[]> {
295
295
  uniqueAccounts(this._accounts, true)
296
296
  const hash = toArrayBuffer(_hash)
297
- const previousHashesBytes = previousHashes.map(ph => (ph ? toUint8Array(ph) : undefined))
297
+ const previousHashesBytes = previousHashes.map(ph => (ph ? toArrayBuffer(ph) : undefined))
298
298
  return await Promise.all(this._accounts.map(async (account, index) => hexFromArrayBuffer(await account.sign(hash, previousHashesBytes[index]))))
299
299
  }
300
300