@xyo-network/boundwitness-validator 2.103.9 → 2.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -67,8 +67,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends import_payload_
67
67
  const errors = [];
68
68
  const { addresses } = this.obj;
69
69
  const uniqAddresses = (0, import_lodash.uniq)(addresses);
70
- if (addresses?.length !== uniqAddresses?.length)
71
- errors.push(new Error("addresses must be unique"));
70
+ if (addresses?.length !== uniqAddresses?.length) errors.push(new Error("addresses must be unique"));
72
71
  return errors;
73
72
  }
74
73
  previousHashes() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
@@ -43,8 +43,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidato
43
43
  const errors = [];
44
44
  const { addresses } = this.obj;
45
45
  const uniqAddresses = uniq(addresses);
46
- if (addresses?.length !== uniqAddresses?.length)
47
- errors.push(new Error("addresses must be unique"));
46
+ if (addresses?.length !== uniqAddresses?.length) errors.push(new Error("addresses must be unique"));
48
47
  return errors;
49
48
  }
50
49
  previousHashes() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["toUint8Array","uniq","validateType","AddressValue","BoundWitnessSchema","PayloadBuilder","PayloadValidator","validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
1
+ {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":";;;;AAAA,SAASA,oBAAoB;AAC7B,SAASC,YAAY;AACrB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAAuBC,0BAA0B;AACjD,SAASC,sBAAsB;AAC/B,SAASC,wBAAwB;AAEjC,IAAMC,2BAA2B,wBAACC,GAAcC,GAAcC,UAAU,4BAAuB;AAC7F,SAAOF,EAAEG,UAAUF,EAAEE,SAAS,CAAA,IAAK;IAAC,IAAIC,MAAM,GAAGF,OAAAA,KAAY;;AAC/D,GAFiC;AAI1B,IAAMG,wBAAN,MAAMA,+BAAyFC,iBAAAA;EAZtG,OAYsGA;;;EACpG,IAAcC,iBAAyB;AACrC,WAAOC;EACT;EAEA,OAAOC,kBAAkBC,MAAmBC,SAAsBC,WAAkC;AAClG,QAAI,CAACA,WAAW;AACd,aAAO;QAAC,IAAIR,MAAM,sBAAsBO,OAAAA,GAAU;;IACpD;AACA,QAAI,CAAC,IAAIE,aAAaC,aAAaH,OAAAA,CAAAA,EAAUI,OAAOL,MAAME,SAAAA,GAAY;AACpE,aAAO;QAAC,IAAIR,MAAM,sBAAsBO,OAAAA,MAAaC,SAAAA,GAAY;;IACnE;AACA,WAAO,CAAA;EACT;EAEAI,YAAqB;AACnB,UAAMC,SAAkB,CAAA;AAGxBA,WAAOC,KAAI,GAAI,KAAKC,oBAAmB,CAAA;AACvC,WAAOF;EACT;EAEAE,sBAA+B;AAC7B,UAAMF,SAAkB,CAAA;AACxB,UAAM,EAAED,UAAS,IAAK,KAAKI;AAC3B,UAAMC,gBAAgBC,KAAKN,SAAAA;AAC3B,QAAIA,WAAWb,WAAWkB,eAAelB,OAAQc,QAAOC,KAAK,IAAId,MAAM,0BAAA,CAAA;AACvE,WAAOa;EACT;EAEAM,iBAAiB;AACf,UAAMN,SAAkB,CAAA;AACxB,WAAOA;EACT;EAEAO,SAAkB;AAChB,UAAMP,SAAkB,CAAA;AACxB,QAAI,KAAKG,IAAII,WAAW,KAAKjB,gBAAgB;AAC3CU,aAAOC,KAAK,IAAId,MAAM,mBAAmB,KAAKG,cAAc,QAAQ,KAAKa,IAAII,MAAM,GAAG,CAAA;IACxF;AACA,WAAOP;EACT;EAEAQ,UAAmB;AACjB,UAAMR,SAAkB,CAAA;AACxB,UAAMS,UAAU,KAAKN,IAAIO;AACzB,QAAID,SAAS;AACX,YAAME,mBAAmBF,QAAQG,IAAI,CAACL,WAAAA;AACpC,eAAOlB,iBAAiBwB,6BAA6BN,MAAAA;MACvD,CAAA;AACA,iBAAWO,aAAaH,kBAAkB;AACxC,YAAIG,WAAW;AACbd,iBAAOC,KAAI,GAAIa,UAAUC,IAAG,CAAA;QAC9B;MACF;IACF;AACA,WAAOf;EACT;EAEA,MAAMgB,aAA+B;AACnC,WAAO;SACFlC,yBAAyB,KAAKqB,IAAIc,OAAOD,cAAc,CAAA,GAAI,KAAKb,IAAIJ,aAAa,CAAA,GAAI,oCAAA;UAEtF,MAAMmB,QAAQH,IACZ,KAAKZ,IAAIJ,WAAWa,IAAsB,OAAOlB,SAASyB,UACxD/B,uBAAsBI,kBACpBK,aAAa,MAAMuB,eAAeC,SAAS,KAAKC,OAAO,CAAA,GACvDzB,aAAaH,OAAAA,GACbG,aAAa,KAAKM,IAAIc,OAAOD,aAAaG,KAAAA,CAAM,CAAA,CAAA,KAE/C,CAAA,CAAE,GAETI,KAAI;;EAEV;EAEA,MAAeC,WAAW;AACxB,WAAO;SACD,MAAM,KAAKR,WAAU;SACtB,KAAKjB,UAAS;SACd,KAAK0B,qBAAoB;SACzB,KAAKjB,QAAO;SACZ,KAAKF,eAAc;SACnB,KAAKC,OAAM;SACV,MAAM,MAAMiB,SAAAA;;EAEpB;EAEAC,uBAAgC;AAC9B,UAAMzB,SAAkB,CAAA;AACxBA,WAAOC,KAAI,GAAI,KAAKyB,4BAA2B,CAAA;AAC/C,WAAO1B;EACT;EAEA0B,8BAAuC;AACrC,UAAM1B,SAAkB,CAAA;AACxBA,WAAOC,KAAI,GAAI,KAAK0B,oBAAoB,kBAAkB,iBAAA,CAAA;AAC1D,WAAO3B;EACT;EAEQ2B,oBAAoBC,WAAmBC,kBAAmC;AAChF,UAAM7B,SAAkB,CAAA;AAExB,UAAM,CAAC8B,OAAOC,WAAAA,IAAeC,aAAa,SAAS,KAAKC,aAAaL,SAAAA,GAAkB,IAAA;AACvF,UAAM,CAACM,cAAcC,kBAAAA,IAAsBH,aAAa,SAAS,KAAKC,aAAaJ,gBAAAA,GAAyB,IAAA;AAE5G,QAAIC,OAAO5C,WAAWgD,cAAchD,QAAQ;AAC1Cc,aAAOC,KAAK,IAAId,MAAM,GAAGyC,SAAAA,IAAaC,gBAAAA,oBAAoCC,OAAO5C,MAAAA,QAAcgD,cAAchD,MAAAA,GAAS,CAAA;IACxH;AAEA,WAAO;SAAI6C;SAAgBI;SAAuBnC;;EACpD;AACF;","names":["toUint8Array","uniq","validateType","AddressValue","BoundWitnessSchema","PayloadBuilder","PayloadValidator","validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
@@ -67,8 +67,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends import_payload_
67
67
  const errors = [];
68
68
  const { addresses } = this.obj;
69
69
  const uniqAddresses = (0, import_lodash.uniq)(addresses);
70
- if (addresses?.length !== uniqAddresses?.length)
71
- errors.push(new Error("addresses must be unique"));
70
+ if (addresses?.length !== uniqAddresses?.length) errors.push(new Error("addresses must be unique"));
72
71
  return errors;
73
72
  }
74
73
  previousHashes() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
@@ -43,8 +43,7 @@ var BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidato
43
43
  const errors = [];
44
44
  const { addresses } = this.obj;
45
45
  const uniqAddresses = uniq(addresses);
46
- if (addresses?.length !== uniqAddresses?.length)
47
- errors.push(new Error("addresses must be unique"));
46
+ if (addresses?.length !== uniqAddresses?.length) errors.push(new Error("addresses must be unique"));
48
47
  return errors;
49
48
  }
50
49
  previousHashes() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":";;;;AAAA,SAASA,oBAAoB;AAC7B,SAASC,YAAY;AACrB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAAuBC,0BAA0B;AACjD,SAASC,sBAAsB;AAC/B,SAASC,wBAAwB;AAEjC,IAAMC,2BAA2B,wBAACC,GAAcC,GAAcC,UAAU,4BAAuB;AAC7F,SAAOF,EAAEG,UAAUF,EAAEE,SAAS,CAAA,IAAK;IAAC,IAAIC,MAAM,GAAGF,OAAAA,KAAY;;AAC/D,GAFiC;AAI1B,IAAMG,wBAAN,MAAMA,+BAAyFC,iBAAAA;EAZtG,OAYsGA;;;EACpG,IAAcC,iBAAyB;AACrC,WAAOC;EACT;EAEA,OAAOC,kBAAkBC,MAAmBC,SAAsBC,WAAkC;AAClG,QAAI,CAACA,WAAW;AACd,aAAO;QAAC,IAAIR,MAAM,sBAAsBO,OAAAA,GAAU;;IACpD;AACA,QAAI,CAAC,IAAIE,aAAaC,aAAaH,OAAAA,CAAAA,EAAUI,OAAOL,MAAME,SAAAA,GAAY;AACpE,aAAO;QAAC,IAAIR,MAAM,sBAAsBO,OAAAA,MAAaC,SAAAA,GAAY;;IACnE;AACA,WAAO,CAAA;EACT;EAEAI,YAAqB;AACnB,UAAMC,SAAkB,CAAA;AAGxBA,WAAOC,KAAI,GAAI,KAAKC,oBAAmB,CAAA;AACvC,WAAOF;EACT;EAEAE,sBAA+B;AAC7B,UAAMF,SAAkB,CAAA;AACxB,UAAM,EAAED,UAAS,IAAK,KAAKI;AAC3B,UAAMC,gBAAgBC,KAAKN,SAAAA;AAC3B,QAAIA,WAAWb,WAAWkB,eAAelB;AAAQc,aAAOC,KAAK,IAAId,MAAM,0BAAA,CAAA;AACvE,WAAOa;EACT;EAEAM,iBAAiB;AACf,UAAMN,SAAkB,CAAA;AACxB,WAAOA;EACT;EAEAO,SAAkB;AAChB,UAAMP,SAAkB,CAAA;AACxB,QAAI,KAAKG,IAAII,WAAW,KAAKjB,gBAAgB;AAC3CU,aAAOC,KAAK,IAAId,MAAM,mBAAmB,KAAKG,cAAc,QAAQ,KAAKa,IAAII,MAAM,GAAG,CAAA;IACxF;AACA,WAAOP;EACT;EAEAQ,UAAmB;AACjB,UAAMR,SAAkB,CAAA;AACxB,UAAMS,UAAU,KAAKN,IAAIO;AACzB,QAAID,SAAS;AACX,YAAME,mBAAmBF,QAAQG,IAAI,CAACL,WAAAA;AACpC,eAAOlB,iBAAiBwB,6BAA6BN,MAAAA;MACvD,CAAA;AACA,iBAAWO,aAAaH,kBAAkB;AACxC,YAAIG,WAAW;AACbd,iBAAOC,KAAI,GAAIa,UAAUC,IAAG,CAAA;QAC9B;MACF;IACF;AACA,WAAOf;EACT;EAEA,MAAMgB,aAA+B;AACnC,WAAO;SACFlC,yBAAyB,KAAKqB,IAAIc,OAAOD,cAAc,CAAA,GAAI,KAAKb,IAAIJ,aAAa,CAAA,GAAI,oCAAA;UAEtF,MAAMmB,QAAQH,IACZ,KAAKZ,IAAIJ,WAAWa,IAAsB,OAAOlB,SAASyB,UACxD/B,uBAAsBI,kBACpBK,aAAa,MAAMuB,eAAeC,SAAS,KAAKC,OAAO,CAAA,GACvDzB,aAAaH,OAAAA,GACbG,aAAa,KAAKM,IAAIc,OAAOD,aAAaG,KAAAA,CAAM,CAAA,CAAA,KAE/C,CAAA,CAAE,GAETI,KAAI;;EAEV;EAEA,MAAeC,WAAW;AACxB,WAAO;SACD,MAAM,KAAKR,WAAU;SACtB,KAAKjB,UAAS;SACd,KAAK0B,qBAAoB;SACzB,KAAKjB,QAAO;SACZ,KAAKF,eAAc;SACnB,KAAKC,OAAM;SACV,MAAM,MAAMiB,SAAAA;;EAEpB;EAEAC,uBAAgC;AAC9B,UAAMzB,SAAkB,CAAA;AACxBA,WAAOC,KAAI,GAAI,KAAKyB,4BAA2B,CAAA;AAC/C,WAAO1B;EACT;EAEA0B,8BAAuC;AACrC,UAAM1B,SAAkB,CAAA;AACxBA,WAAOC,KAAI,GAAI,KAAK0B,oBAAoB,kBAAkB,iBAAA,CAAA;AAC1D,WAAO3B;EACT;EAEQ2B,oBAAoBC,WAAmBC,kBAAmC;AAChF,UAAM7B,SAAkB,CAAA;AAExB,UAAM,CAAC8B,OAAOC,WAAAA,IAAeC,aAAa,SAAS,KAAKC,aAAaL,SAAAA,GAAkB,IAAA;AACvF,UAAM,CAACM,cAAcC,kBAAAA,IAAsBH,aAAa,SAAS,KAAKC,aAAaJ,gBAAAA,GAAyB,IAAA;AAE5G,QAAIC,OAAO5C,WAAWgD,cAAchD,QAAQ;AAC1Cc,aAAOC,KAAK,IAAId,MAAM,GAAGyC,SAAAA,IAAaC,gBAAAA,oBAAoCC,OAAO5C,MAAAA,QAAcgD,cAAchD,MAAAA,GAAS,CAAA;IACxH;AAEA,WAAO;SAAI6C;SAAgBI;SAAuBnC;;EACpD;AACF;","names":["toUint8Array","uniq","validateType","AddressValue","BoundWitnessSchema","PayloadBuilder","PayloadValidator","validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
1
+ {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["toUint8Array","uniq","validateType","AddressValue","BoundWitnessSchema","PayloadBuilder","PayloadValidator","validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
@@ -64,8 +64,7 @@ var _BoundWitnessValidator = class _BoundWitnessValidator extends import_payload
64
64
  const errors = [];
65
65
  const { addresses } = this.obj;
66
66
  const uniqAddresses = (0, import_lodash.uniq)(addresses);
67
- if ((addresses == null ? void 0 : addresses.length) !== (uniqAddresses == null ? void 0 : uniqAddresses.length))
68
- errors.push(new Error("addresses must be unique"));
67
+ if ((addresses == null ? void 0 : addresses.length) !== (uniqAddresses == null ? void 0 : uniqAddresses.length)) errors.push(new Error("addresses must be unique"));
69
68
  return errors;
70
69
  }
71
70
  previousHashes() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","_a","_b","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Validator.ts"],"sourcesContent":["export * from './Validator'\n","import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,yBAA6B;AAC7B,oBAAqB;AACrB,oBAA6B;AAC7B,qBAA6B;AAC7B,gCAAiD;AACjD,qBAA+B;AAC/B,+BAAiC;AAEjC,IAAMA,2BAA2B,wBAACC,GAAcC,GAAcC,UAAU,4BAAuB;AAC7F,SAAOF,EAAEG,UAAUF,EAAEE,SAAS,CAAA,IAAK;IAAC,IAAIC,MAAM,GAAGF,OAAAA,KAAY;;AAC/D,GAFiC;AAI1B,IAAMG,yBAAN,MAAMA,+BAAyFC,0CAAAA;EACpG,IAAcC,iBAAyB;AACrC,WAAOC;EACT;EAEA,OAAOC,kBAAkBC,MAAmBC,SAAsBC,WAAkC;AAClG,QAAI,CAACA,WAAW;AACd,aAAO;QAAC,IAAIR,MAAM,sBAAsBO,OAAAA,GAAU;;IACpD;AACA,QAAI,CAAC,IAAIE,gCAAaC,iCAAaH,OAAAA,CAAAA,EAAUI,OAAOL,MAAME,SAAAA,GAAY;AACpE,aAAO;QAAC,IAAIR,MAAM,sBAAsBO,OAAAA,MAAaC,SAAAA,GAAY;;IACnE;AACA,WAAO,CAAA;EACT;EAEAI,YAAqB;AACnB,UAAMC,SAAkB,CAAA;AAGxBA,WAAOC,KAAI,GAAI,KAAKC,oBAAmB,CAAA;AACvC,WAAOF;EACT;EAEAE,sBAA+B;AAC7B,UAAMF,SAAkB,CAAA;AACxB,UAAM,EAAED,UAAS,IAAK,KAAKI;AAC3B,UAAMC,oBAAgBC,oBAAKN,SAAAA;AAC3B,SAAIA,uCAAWb,aAAWkB,+CAAelB,QAAQc,QAAOC,KAAK,IAAId,MAAM,0BAAA,CAAA;AACvE,WAAOa;EACT;EAEAM,iBAAiB;AACf,UAAMN,SAAkB,CAAA;AACxB,WAAOA;EACT;EAEAO,SAAkB;AAChB,UAAMP,SAAkB,CAAA;AACxB,QAAI,KAAKG,IAAII,WAAW,KAAKjB,gBAAgB;AAC3CU,aAAOC,KAAK,IAAId,MAAM,mBAAmB,KAAKG,cAAc,QAAQ,KAAKa,IAAII,MAAM,GAAG,CAAA;IACxF;AACA,WAAOP;EACT;EAEAQ,UAAmB;AACjB,UAAMR,SAAkB,CAAA;AACxB,UAAMS,UAAU,KAAKN,IAAIO;AACzB,QAAID,SAAS;AACX,YAAME,mBAAmBF,QAAQG,IAAI,CAACL,WAAAA;AA5D5C;AA6DQ,gBAAOlB,sDAAiBwB,+BAAjBxB,4BAA8CkB;MACvD,CAAA;AACA,iBAAWO,aAAaH,kBAAkB;AACxC,YAAIG,WAAW;AACbd,iBAAOC,KAAI,GAAIa,UAAUC,IAAG,CAAA;QAC9B;MACF;IACF;AACA,WAAOf;EACT;EAEA,MAAMgB,aAA+B;AAxEvC;AAyEI,WAAO;SACFlC,2BAAyB,UAAKqB,IAAIc,UAAT,mBAAgBD,eAAc,CAAA,GAAI,KAAKb,IAAIJ,aAAa,CAAA,GAAI,oCAAA;UAEtF,MAAMmB,QAAQH,MACZ,UAAKZ,IAAIJ,cAAT,mBAAoBa,IAAsB,OAAOlB,SAASyB,UAAAA;AA7EpE,YAAAC,KAAAC;AA8EYjC,sCAAsBI,sBACpBK,iCAAa,MAAMyB,8BAAeC,SAAS,KAAKC,OAAO,CAAA,OACvD3B,iCAAaH,OAAAA,OACbG,kCAAawB,OAAAD,MAAA,KAAKjB,IAAIc,UAAT,gBAAAG,IAAgBJ,eAAhB,gBAAAK,IAA6BF,MAAM,CAAA;aAE/C,CAAA,CAAE,GAETM,KAAI;;EAEV;EAEA,MAAeC,WAAW;AACxB,WAAO;SACD,MAAM,KAAKV,WAAU;SACtB,KAAKjB,UAAS;SACd,KAAK4B,qBAAoB;SACzB,KAAKnB,QAAO;SACZ,KAAKF,eAAc;SACnB,KAAKC,OAAM;SACV,MAAM,MAAMmB,SAAAA;;EAEpB;EAEAC,uBAAgC;AAC9B,UAAM3B,SAAkB,CAAA;AACxBA,WAAOC,KAAI,GAAI,KAAK2B,4BAA2B,CAAA;AAC/C,WAAO5B;EACT;EAEA4B,8BAAuC;AACrC,UAAM5B,SAAkB,CAAA;AACxBA,WAAOC,KAAI,GAAI,KAAK4B,oBAAoB,kBAAkB,iBAAA,CAAA;AAC1D,WAAO7B;EACT;EAEQ6B,oBAAoBC,WAAmBC,kBAAmC;AAChF,UAAM/B,SAAkB,CAAA;AAExB,UAAM,CAACgC,OAAOC,WAAAA,QAAeC,4BAAa,SAAS,KAAKC,aAAaL,SAAAA,GAAkB,IAAA;AACvF,UAAM,CAACM,cAAcC,kBAAAA,QAAsBH,4BAAa,SAAS,KAAKC,aAAaJ,gBAAAA,GAAyB,IAAA;AAE5G,SAAIC,+BAAO9C,aAAWkD,6CAAclD,SAAQ;AAC1Cc,aAAOC,KAAK,IAAId,MAAM,GAAG2C,SAAAA,IAAaC,gBAAAA,oBAAoCC,+BAAO9C,MAAAA,QAAckD,6CAAclD,MAAAA,GAAS,CAAA;IACxH;AAEA,WAAO;SAAI+C;SAAgBI;SAAuBrC;;EACpD;AACF;AAjHsGX;AAA/F,IAAMD,wBAAN;","names":["validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","_a","_b","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
@@ -40,8 +40,7 @@ var _BoundWitnessValidator = class _BoundWitnessValidator extends PayloadValidat
40
40
  const errors = [];
41
41
  const { addresses } = this.obj;
42
42
  const uniqAddresses = uniq(addresses);
43
- if ((addresses == null ? void 0 : addresses.length) !== (uniqAddresses == null ? void 0 : uniqAddresses.length))
44
- errors.push(new Error("addresses must be unique"));
43
+ if ((addresses == null ? void 0 : addresses.length) !== (uniqAddresses == null ? void 0 : uniqAddresses.length)) errors.push(new Error("addresses must be unique"));
45
44
  return errors;
46
45
  }
47
46
  previousHashes() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["toUint8Array","uniq","validateType","AddressValue","BoundWitnessSchema","PayloadBuilder","PayloadValidator","validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","_a","_b","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
1
+ {"version":3,"sources":["../../src/Validator.ts"],"sourcesContent":["import { toUint8Array } from '@xylabs/arraybuffer'\nimport { uniq } from '@xylabs/lodash'\nimport { validateType } from '@xylabs/typeof'\nimport { AddressValue } from '@xyo-network/account'\nimport { BoundWitness, BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport { PayloadValidator } from '@xyo-network/payload-validator'\n\nconst validateArraysSameLength = (a: unknown[], b: unknown[], message = 'Array length mismatch') => {\n return a.length == b.length ? [] : [new 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 [new Error(`Missing signature [${address}]`)]\n }\n if (!new AddressValue(toUint8Array(address)).verify(hash, signature)) {\n return [new 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(new 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(new 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 for (const validator of schemaValidators) {\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.$meta?.signatures ?? [], this.obj.addresses ?? [], 'Length mismatch: address/signature'),\n ...(\n await Promise.all(\n this.obj.addresses?.map<Promise<Error[]>>(async (address, index) =>\n BoundWitnessValidator.validateSignature(\n toUint8Array(await PayloadBuilder.dataHash(this.payload)),\n toUint8Array(address),\n toUint8Array(this.obj.$meta?.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":["toUint8Array","uniq","validateType","AddressValue","BoundWitnessSchema","PayloadBuilder","PayloadValidator","validateArraysSameLength","a","b","message","length","Error","BoundWitnessValidator","PayloadValidator","expectedSchema","BoundWitnessSchema","validateSignature","hash","address","signature","AddressValue","toUint8Array","verify","addresses","errors","push","addressesUniqueness","obj","uniqAddresses","uniq","previousHashes","schema","schemas","Schemas","payload_schemas","schemaValidators","map","schemaNameValidatorFactory","validator","all","signatures","$meta","Promise","index","_a","_b","PayloadBuilder","dataHash","payload","flat","validate","validateArrayLengths","validatePayloadHashesLength","validateArrayLength","fieldName","compareArrayName","array","arrayErrors","validateType","stringKeyObj","compareArray","compareArrayErrors"]}
package/package.json CHANGED
@@ -10,20 +10,20 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/arraybuffer": "^3.5.0",
14
- "@xylabs/lodash": "^3.5.0",
15
- "@xylabs/typeof": "^3.5.0",
16
- "@xyo-network/account": "~2.103.9",
17
- "@xyo-network/boundwitness-model": "~2.103.9",
18
- "@xyo-network/payload": "~2.103.9",
19
- "@xyo-network/payload-validator": "~2.103.9"
13
+ "@xylabs/arraybuffer": "^3.5.1",
14
+ "@xylabs/lodash": "^3.5.1",
15
+ "@xylabs/typeof": "^3.5.1",
16
+ "@xyo-network/account": "~2.104.1",
17
+ "@xyo-network/boundwitness-model": "~2.104.1",
18
+ "@xyo-network/payload": "~2.104.1",
19
+ "@xyo-network/payload-validator": "~2.104.1"
20
20
  },
21
21
  "description": "Primary SDK for using XYO Protocol 2.0",
22
22
  "devDependencies": {
23
- "@xylabs/ts-scripts-yarn3": "^3.10.4",
24
- "@xylabs/tsconfig": "^3.10.4",
25
- "@xyo-network/boundwitness-builder": "~2.103.9",
26
- "@xyo-network/schema-name-validator": "~2.103.9",
23
+ "@xylabs/ts-scripts-yarn3": "^3.11.2",
24
+ "@xylabs/tsconfig": "^3.11.2",
25
+ "@xyo-network/boundwitness-builder": "~2.104.1",
26
+ "@xyo-network/schema-name-validator": "~2.104.1",
27
27
  "typescript": "^5.4.5"
28
28
  },
29
29
  "exports": {
@@ -64,6 +64,6 @@
64
64
  },
65
65
  "sideEffects": false,
66
66
  "types": "dist/node/index.d.ts",
67
- "version": "2.103.9",
67
+ "version": "2.104.1",
68
68
  "type": "module"
69
69
  }