@xyo-network/boundwitness-validator 2.81.6 → 2.81.8

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.
@@ -4,7 +4,7 @@ export declare class BoundWitnessValidator<T extends BoundWitness<{
4
4
  schema: string;
5
5
  }> = BoundWitness> extends PayloadValidator<T> {
6
6
  protected get expectedSchema(): string;
7
- static validateSignature(hash: string, address: string, signature?: string): Error[];
7
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[];
8
8
  addresses(): Error[];
9
9
  addressesUniqueness(): Error[];
10
10
  previousHashes(): Error[];
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpF,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAerB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE;IAUnG,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBrB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -4,7 +4,7 @@ export declare class BoundWitnessValidator<T extends BoundWitness<{
4
4
  schema: string;
5
5
  }> = BoundWitness> extends PayloadValidator<T> {
6
6
  protected get expectedSchema(): string;
7
- static validateSignature(hash: string, address: string, signature?: string): Error[];
7
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[];
8
8
  addresses(): Error[];
9
9
  addressesUniqueness(): Error[];
10
10
  previousHashes(): Error[];
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpF,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAerB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE;IAUnG,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBrB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -4,7 +4,7 @@ export declare class BoundWitnessValidator<T extends BoundWitness<{
4
4
  schema: string;
5
5
  }> = BoundWitness> extends PayloadValidator<T> {
6
6
  protected get expectedSchema(): string;
7
- static validateSignature(hash: string, address: string, signature?: string): Error[];
7
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[];
8
8
  addresses(): Error[];
9
9
  addressesUniqueness(): Error[];
10
10
  previousHashes(): Error[];
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpF,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAerB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE;IAUnG,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBrB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -29,6 +29,7 @@ var import_lodash = require("@xylabs/lodash");
29
29
  var import_account = require("@xyo-network/account");
30
30
  var import_boundwitness_model = require("@xyo-network/boundwitness-model");
31
31
  var import_core = require("@xyo-network/core");
32
+ var import_hash = require("@xyo-network/hash");
32
33
  var import_payload_validator = require("@xyo-network/payload-validator");
33
34
  var import_typeof = require("@xyo-network/typeof");
34
35
  var validateArraysSameLength = (a, b, message = "Array length mismatch") => {
@@ -42,7 +43,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends import_payload_
42
43
  if (!signature) {
43
44
  return [Error(`Missing signature [${address}]`)];
44
45
  }
45
- if (!new import_account.AddressValue(address).verify(hash, signature)) {
46
+ if (!new import_account.AddressValue((0, import_core.toUint8Array)(address)).verify(hash, signature)) {
46
47
  return [Error(`Invalid signature [${address}] [${signature}]`)];
47
48
  }
48
49
  return [];
@@ -91,7 +92,11 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends import_payload_
91
92
  ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, "Length mismatch: address/_signature"),
92
93
  ...(await Promise.all(
93
94
  this.obj.addresses.map(
94
- async (address, index) => _BoundWitnessValidator.validateSignature(await import_core.PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),
95
+ async (address, index) => _BoundWitnessValidator.validateSignature(
96
+ (0, import_core.toUint8Array)(await import_hash.PayloadHasher.hashAsync(this.payload)),
97
+ (0, import_core.toUint8Array)(address),
98
+ (0, import_core.toUint8Array)(this.obj._signatures?.[index])
99
+ ),
95
100
  []
96
101
  )
97
102
  )).flat()
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: string, address: string, signature?: string): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(address).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { toUint8Array } from '@xyo-network/core'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadHasher.hashAsync(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj._signatures?.[index]),\n ),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,8 @@
2
2
  import { uniq } from "@xylabs/lodash";
3
3
  import { AddressValue } from "@xyo-network/account";
4
4
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
5
- import { PayloadHasher } from "@xyo-network/core";
5
+ import { toUint8Array } from "@xyo-network/core";
6
+ import { PayloadHasher } from "@xyo-network/hash";
6
7
  import { PayloadValidator } from "@xyo-network/payload-validator";
7
8
  import { validateType } from "@xyo-network/typeof";
8
9
  var validateArraysSameLength = (a, b, message = "Array length mismatch") => {
@@ -16,7 +17,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidato
16
17
  if (!signature) {
17
18
  return [Error(`Missing signature [${address}]`)];
18
19
  }
19
- if (!new AddressValue(address).verify(hash, signature)) {
20
+ if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {
20
21
  return [Error(`Invalid signature [${address}] [${signature}]`)];
21
22
  }
22
23
  return [];
@@ -65,7 +66,11 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidato
65
66
  ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, "Length mismatch: address/_signature"),
66
67
  ...(await Promise.all(
67
68
  this.obj.addresses.map(
68
- async (address, index) => _BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),
69
+ async (address, index) => _BoundWitnessValidator.validateSignature(
70
+ toUint8Array(await PayloadHasher.hashAsync(this.payload)),
71
+ toUint8Array(address),
72
+ toUint8Array(this.obj._signatures?.[index])
73
+ ),
69
74
  []
70
75
  )
71
76
  )).flat()
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: string, address: string, signature?: string): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(address).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { toUint8Array } from '@xyo-network/core'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadHasher.hashAsync(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj._signatures?.[index]),\n ),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ export declare class BoundWitnessValidator<T extends BoundWitness<{
4
4
  schema: string;
5
5
  }> = BoundWitness> extends PayloadValidator<T> {
6
6
  protected get expectedSchema(): string;
7
- static validateSignature(hash: string, address: string, signature?: string): Error[];
7
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[];
8
8
  addresses(): Error[];
9
9
  addressesUniqueness(): Error[];
10
10
  previousHashes(): Error[];
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpF,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAerB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE;IAUnG,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBrB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -4,7 +4,7 @@ export declare class BoundWitnessValidator<T extends BoundWitness<{
4
4
  schema: string;
5
5
  }> = BoundWitness> extends PayloadValidator<T> {
6
6
  protected get expectedSchema(): string;
7
- static validateSignature(hash: string, address: string, signature?: string): Error[];
7
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[];
8
8
  addresses(): Error[];
9
9
  addressesUniqueness(): Error[];
10
10
  previousHashes(): Error[];
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpF,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAerB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE;IAUnG,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBrB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -4,7 +4,7 @@ export declare class BoundWitnessValidator<T extends BoundWitness<{
4
4
  schema: string;
5
5
  }> = BoundWitness> extends PayloadValidator<T> {
6
6
  protected get expectedSchema(): string;
7
- static validateSignature(hash: string, address: string, signature?: string): Error[];
7
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[];
8
8
  addresses(): Error[];
9
9
  addressesUniqueness(): Error[];
10
10
  previousHashes(): Error[];
@@ -1 +1 @@
1
- {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpF,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAerB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
1
+ {"version":3,"file":"Validator.d.ts","sourceRoot":"","sources":["../../src/Validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOjE,qBAAa,qBAAqB,CAAC,CAAC,SAAS,YAAY,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IACvH,SAAS,KAAK,cAAc,IAAI,MAAM,CAErC;IAED,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,EAAE;IAUnG,SAAS,IAAI,KAAK,EAAE;IAQpB,mBAAmB,IAAI,KAAK,EAAE;IAQ9B,cAAc;IAKd,MAAM,IAAI,KAAK,EAAE;IAQjB,OAAO,IAAI,KAAK,EAAE;IAgBZ,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBrB,QAAQ;IAYvB,oBAAoB,IAAI,KAAK,EAAE;IAM/B,2BAA2B,IAAI,KAAK,EAAE;IAMtC,OAAO,CAAC,mBAAmB;CAY5B"}
@@ -29,6 +29,7 @@ var import_lodash = require("@xylabs/lodash");
29
29
  var import_account = require("@xyo-network/account");
30
30
  var import_boundwitness_model = require("@xyo-network/boundwitness-model");
31
31
  var import_core = require("@xyo-network/core");
32
+ var import_hash = require("@xyo-network/hash");
32
33
  var import_payload_validator = require("@xyo-network/payload-validator");
33
34
  var import_typeof = require("@xyo-network/typeof");
34
35
  var validateArraysSameLength = (a, b, message = "Array length mismatch") => {
@@ -42,7 +43,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends import_payload_
42
43
  if (!signature) {
43
44
  return [Error(`Missing signature [${address}]`)];
44
45
  }
45
- if (!new import_account.AddressValue(address).verify(hash, signature)) {
46
+ if (!new import_account.AddressValue((0, import_core.toUint8Array)(address)).verify(hash, signature)) {
46
47
  return [Error(`Invalid signature [${address}] [${signature}]`)];
47
48
  }
48
49
  return [];
@@ -94,7 +95,11 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends import_payload_
94
95
  this.obj.addresses.map(
95
96
  async (address, index) => {
96
97
  var _a;
97
- return _BoundWitnessValidator.validateSignature(await import_core.PayloadHasher.hashAsync(this.payload), address, (_a = this.obj._signatures) == null ? void 0 : _a[index]);
98
+ return _BoundWitnessValidator.validateSignature(
99
+ (0, import_core.toUint8Array)(await import_hash.PayloadHasher.hashAsync(this.payload)),
100
+ (0, import_core.toUint8Array)(address),
101
+ (0, import_core.toUint8Array)((_a = this.obj._signatures) == null ? void 0 : _a[index])
102
+ );
98
103
  },
99
104
  []
100
105
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: string, address: string, signature?: string): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(address).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { toUint8Array } from '@xyo-network/core'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadHasher.hashAsync(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj._signatures?.[index]),\n ),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,8 @@
2
2
  import { uniq } from "@xylabs/lodash";
3
3
  import { AddressValue } from "@xyo-network/account";
4
4
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
5
- import { PayloadHasher } from "@xyo-network/core";
5
+ import { toUint8Array } from "@xyo-network/core";
6
+ import { PayloadHasher } from "@xyo-network/hash";
6
7
  import { PayloadValidator } from "@xyo-network/payload-validator";
7
8
  import { validateType } from "@xyo-network/typeof";
8
9
  var validateArraysSameLength = (a, b, message = "Array length mismatch") => {
@@ -16,7 +17,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidato
16
17
  if (!signature) {
17
18
  return [Error(`Missing signature [${address}]`)];
18
19
  }
19
- if (!new AddressValue(address).verify(hash, signature)) {
20
+ if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {
20
21
  return [Error(`Invalid signature [${address}] [${signature}]`)];
21
22
  }
22
23
  return [];
@@ -68,7 +69,11 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidato
68
69
  this.obj.addresses.map(
69
70
  async (address, index) => {
70
71
  var _a;
71
- return _BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, (_a = this.obj._signatures) == null ? void 0 : _a[index]);
72
+ return _BoundWitnessValidator.validateSignature(
73
+ toUint8Array(await PayloadHasher.hashAsync(this.payload)),
74
+ toUint8Array(address),
75
+ toUint8Array((_a = this.obj._signatures) == null ? void 0 : _a[index])
76
+ );
72
77
  },
73
78
  []
74
79
  )
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: string, address: string, signature?: string): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(address).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { uniq } from '@xylabs/lodash'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { toUint8Array } from '@xyo-network/core'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\nimport { validateType } from '@xyo-network/typeof'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length != b.length ? [Error(`${message} []`)] : []\n}\n\nexport class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> = BoundWitness> extends PayloadValidator<T> {\n protected get expectedSchema(): string {\n return BoundWitnessSchema\n }\n\n static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[] {\n if (!signature) {\n return [Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [Error(`Invalid signature [${address}] [${signature}]`)]\n }\n return []\n }\n\n addresses(): Error[] {\n const errors: Error[] = []\n //const { addresses } = this.obj\n //if (!addresses?.length) errors.push(new Error('addresses missing [at least one address required]'))\n errors.push(...this.addressesUniqueness())\n return errors\n }\n\n addressesUniqueness(): Error[] {\n const errors: Error[] = []\n const { addresses } = this.obj\n const uniqAddresses = uniq(addresses)\n if (addresses?.length !== uniqAddresses?.length) errors.push(Error('addresses must be unique'))\n return errors\n }\n\n previousHashes() {\n const errors: Error[] = []\n return errors\n }\n\n schema(): Error[] {\n const errors: Error[] = []\n if (this.obj.schema !== this.expectedSchema) {\n errors.push(Error(`invalid schema [${this.expectedSchema} !== ${this.obj.schema}]`))\n }\n return errors\n }\n\n schemas(): Error[] {\n const errors: Error[] = []\n const Schemas = this.obj.payload_schemas\n if (Schemas) {\n const schemaValidators = Schemas.map((schema: string) => {\n return PayloadValidator.schemaNameValidatorFactory?.(schema)\n })\n schemaValidators.forEach((validator) => {\n if (validator) {\n errors.push(...validator.all())\n }\n })\n }\n return errors\n }\n\n async signatures(): Promise<Error[]> {\n return [\n ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),\n ...(\n await Promise.all(\n this.obj.addresses.map<Promise<Error[]>>(\n async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadHasher.hashAsync(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj._signatures?.[index]),\n ),\n [],\n ),\n )\n ).flat(),\n ]\n }\n\n override async validate() {\n return [\n ...(await this.signatures()),\n ...this.addresses(),\n ...this.validateArrayLengths(),\n ...this.schemas(),\n ...this.previousHashes(),\n ...this.schema(),\n ...(await super.validate()),\n ]\n }\n\n validateArrayLengths(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validatePayloadHashesLength())\n return errors\n }\n\n validatePayloadHashesLength(): Error[] {\n const errors: Error[] = []\n errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'))\n return errors\n }\n\n private validateArrayLength(fieldName: string, compareArrayName: string): Error[] {\n const errors: Error[] = []\n\n const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName] as [], true)\n const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName] as [], true)\n\n if (array?.length !== compareArray?.length) {\n errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`))\n }\n\n return [...arrayErrors, ...compareArrayErrors, ...errors]\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -10,18 +10,19 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/lodash": "^2.13.9",
14
- "@xyo-network/account": "~2.81.6",
15
- "@xyo-network/boundwitness-model": "~2.81.6",
16
- "@xyo-network/core": "~2.81.6",
17
- "@xyo-network/payload-validator": "~2.81.6",
18
- "@xyo-network/typeof": "~2.81.6"
13
+ "@xylabs/lodash": "^2.13.15",
14
+ "@xyo-network/account": "~2.81.8",
15
+ "@xyo-network/boundwitness-model": "~2.81.8",
16
+ "@xyo-network/core": "~2.81.8",
17
+ "@xyo-network/hash": "~2.81.8",
18
+ "@xyo-network/payload-validator": "~2.81.8",
19
+ "@xyo-network/typeof": "~2.81.8"
19
20
  },
20
21
  "description": "Primary SDK for using XYO Protocol 2.0",
21
22
  "devDependencies": {
22
- "@xylabs/ts-scripts-yarn3": "^3.2.8",
23
- "@xylabs/tsconfig": "^3.2.8",
24
- "@xyo-network/schema-name-validator": "~2.81.6",
23
+ "@xylabs/ts-scripts-yarn3": "^3.2.10",
24
+ "@xylabs/tsconfig": "^3.2.10",
25
+ "@xyo-network/schema-name-validator": "~2.81.8",
25
26
  "typescript": "^5.3.2"
26
27
  },
27
28
  "docs": "dist/docs.json",
@@ -63,5 +64,5 @@
63
64
  },
64
65
  "sideEffects": false,
65
66
  "types": "dist/node/index.d.ts",
66
- "version": "2.81.6"
67
+ "version": "2.81.8"
67
68
  }
package/src/Validator.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { uniq } from '@xylabs/lodash'
2
2
  import { AddressValue } from '@xyo-network/account'
3
3
  import { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'
4
- import { PayloadHasher } from '@xyo-network/core'
4
+ import { toUint8Array } from '@xyo-network/core'
5
+ import { PayloadHasher } from '@xyo-network/hash'
5
6
  import { PayloadValidator } from '@xyo-network/payload-validator'
6
7
  import { validateType } from '@xyo-network/typeof'
7
8
 
@@ -14,11 +15,11 @@ export class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> =
14
15
  return BoundWitnessSchema
15
16
  }
16
17
 
17
- static validateSignature(hash: string, address: string, signature?: string): Error[] {
18
+ static validateSignature(hash: ArrayBuffer, address: ArrayBuffer, signature?: ArrayBuffer): Error[] {
18
19
  if (!signature) {
19
20
  return [Error(`Missing signature [${address}]`)]
20
21
  }
21
- if (!new AddressValue(address).verify(hash, signature)) {
22
+ if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {
22
23
  return [Error(`Invalid signature [${address}] [${signature}]`)]
23
24
  }
24
25
  return []
@@ -76,7 +77,11 @@ export class BoundWitnessValidator<T extends BoundWitness<{ schema: string }> =
76
77
  await Promise.all(
77
78
  this.obj.addresses.map<Promise<Error[]>>(
78
79
  async (address, index) =>
79
- BoundWitnessValidator.validateSignature(await PayloadHasher.hashAsync(this.payload), address, this.obj._signatures?.[index]),
80
+ BoundWitnessValidator.validateSignature(
81
+ toUint8Array(await PayloadHasher.hashAsync(this.payload)),
82
+ toUint8Array(address),
83
+ toUint8Array(this.obj._signatures?.[index]),
84
+ ),
80
85
  [],
81
86
  ),
82
87
  )