@xyo-network/boundwitness 2.21.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +79 -0
  3. package/babel.config.json +5 -0
  4. package/dist/cjs/Builder/Builder.d.ts +23 -0
  5. package/dist/cjs/Builder/Builder.js +68 -0
  6. package/dist/cjs/Builder/Builder.js.map +1 -0
  7. package/dist/cjs/Builder/index.d.ts +1 -0
  8. package/dist/cjs/Builder/index.js +5 -0
  9. package/dist/cjs/Builder/index.js.map +1 -0
  10. package/dist/cjs/Test/index.d.ts +1 -0
  11. package/dist/cjs/Test/index.js +5 -0
  12. package/dist/cjs/Test/index.js.map +1 -0
  13. package/dist/cjs/Test/testBoundWitness.d.ts +3 -0
  14. package/dist/cjs/Test/testBoundWitness.js +17 -0
  15. package/dist/cjs/Test/testBoundWitness.js.map +1 -0
  16. package/dist/cjs/Validator/BodyValidator.d.ts +17 -0
  17. package/dist/cjs/Validator/BodyValidator.js +94 -0
  18. package/dist/cjs/Validator/BodyValidator.js.map +1 -0
  19. package/dist/cjs/Validator/MetaValidator.d.ts +13 -0
  20. package/dist/cjs/Validator/MetaValidator.js +67 -0
  21. package/dist/cjs/Validator/MetaValidator.js.map +1 -0
  22. package/dist/cjs/Validator/Validator.d.ts +12 -0
  23. package/dist/cjs/Validator/Validator.js +47 -0
  24. package/dist/cjs/Validator/Validator.js.map +1 -0
  25. package/dist/cjs/Validator/index.d.ts +3 -0
  26. package/dist/cjs/Validator/index.js +7 -0
  27. package/dist/cjs/Validator/index.js.map +1 -0
  28. package/dist/cjs/Validator/ip-regex.d.ts +9 -0
  29. package/dist/cjs/Validator/ip-regex.js +31 -0
  30. package/dist/cjs/Validator/ip-regex.js.map +1 -0
  31. package/dist/cjs/Validator/is-ip.d.ts +4 -0
  32. package/dist/cjs/Validator/is-ip.js +21 -0
  33. package/dist/cjs/Validator/is-ip.js.map +1 -0
  34. package/dist/cjs/Wrapper/Wrapper.d.ts +11 -0
  35. package/dist/cjs/Wrapper/Wrapper.js +27 -0
  36. package/dist/cjs/Wrapper/Wrapper.js.map +1 -0
  37. package/dist/cjs/Wrapper/index.d.ts +1 -0
  38. package/dist/cjs/Wrapper/index.js +5 -0
  39. package/dist/cjs/Wrapper/index.js.map +1 -0
  40. package/dist/cjs/index.d.ts +5 -0
  41. package/dist/cjs/index.js +9 -0
  42. package/dist/cjs/index.js.map +1 -0
  43. package/dist/cjs/isXyoPayloadOfSchemaType.d.ts +2 -0
  44. package/dist/cjs/isXyoPayloadOfSchemaType.js +6 -0
  45. package/dist/cjs/isXyoPayloadOfSchemaType.js.map +1 -0
  46. package/dist/cjs/models/Base/XyoBoundWitnessBase.d.ts +9 -0
  47. package/dist/cjs/models/Base/XyoBoundWitnessBase.js +3 -0
  48. package/dist/cjs/models/Base/XyoBoundWitnessBase.js.map +1 -0
  49. package/dist/cjs/models/Base/XyoBoundWitnessBaseSchema.d.ts +36 -0
  50. package/dist/cjs/models/Base/XyoBoundWitnessBaseSchema.js +19 -0
  51. package/dist/cjs/models/Base/XyoBoundWitnessBaseSchema.js.map +1 -0
  52. package/dist/cjs/models/Base/index.d.ts +2 -0
  53. package/dist/cjs/models/Base/index.js +6 -0
  54. package/dist/cjs/models/Base/index.js.map +1 -0
  55. package/dist/cjs/models/Meta/XyoBoundWitnessMeta.d.ts +7 -0
  56. package/dist/cjs/models/Meta/XyoBoundWitnessMeta.js +3 -0
  57. package/dist/cjs/models/Meta/XyoBoundWitnessMeta.js.map +1 -0
  58. package/dist/cjs/models/Meta/XyoBoundWitnessMetaSchema.d.ts +85 -0
  59. package/dist/cjs/models/Meta/XyoBoundWitnessMetaSchema.js +28 -0
  60. package/dist/cjs/models/Meta/XyoBoundWitnessMetaSchema.js.map +1 -0
  61. package/dist/cjs/models/Meta/index.d.ts +2 -0
  62. package/dist/cjs/models/Meta/index.js +6 -0
  63. package/dist/cjs/models/Meta/index.js.map +1 -0
  64. package/dist/cjs/models/WithXyoBoundWitnessMeta.d.ts +4 -0
  65. package/dist/cjs/models/WithXyoBoundWitnessMeta.js +3 -0
  66. package/dist/cjs/models/WithXyoBoundWitnessMeta.js.map +1 -0
  67. package/dist/cjs/models/XyoBoundWitness.d.ts +6 -0
  68. package/dist/cjs/models/XyoBoundWitness.js +3 -0
  69. package/dist/cjs/models/XyoBoundWitness.js.map +1 -0
  70. package/dist/cjs/models/XyoBoundWitnessSchema.d.ts +75 -0
  71. package/dist/cjs/models/XyoBoundWitnessSchema.js +17 -0
  72. package/dist/cjs/models/XyoBoundWitnessSchema.js.map +1 -0
  73. package/dist/cjs/models/index.d.ts +5 -0
  74. package/dist/cjs/models/index.js +9 -0
  75. package/dist/cjs/models/index.js.map +1 -0
  76. package/dist/docs.json +7 -0
  77. package/dist/esm/Builder/Builder.d.ts +23 -0
  78. package/dist/esm/Builder/Builder.js +66 -0
  79. package/dist/esm/Builder/Builder.js.map +1 -0
  80. package/dist/esm/Builder/index.d.ts +1 -0
  81. package/dist/esm/Builder/index.js +2 -0
  82. package/dist/esm/Builder/index.js.map +1 -0
  83. package/dist/esm/Test/index.d.ts +1 -0
  84. package/dist/esm/Test/index.js +2 -0
  85. package/dist/esm/Test/index.js.map +1 -0
  86. package/dist/esm/Test/testBoundWitness.d.ts +3 -0
  87. package/dist/esm/Test/testBoundWitness.js +14 -0
  88. package/dist/esm/Test/testBoundWitness.js.map +1 -0
  89. package/dist/esm/Validator/BodyValidator.d.ts +17 -0
  90. package/dist/esm/Validator/BodyValidator.js +88 -0
  91. package/dist/esm/Validator/BodyValidator.js.map +1 -0
  92. package/dist/esm/Validator/MetaValidator.d.ts +13 -0
  93. package/dist/esm/Validator/MetaValidator.js +63 -0
  94. package/dist/esm/Validator/MetaValidator.js.map +1 -0
  95. package/dist/esm/Validator/Validator.d.ts +12 -0
  96. package/dist/esm/Validator/Validator.js +42 -0
  97. package/dist/esm/Validator/Validator.js.map +1 -0
  98. package/dist/esm/Validator/index.d.ts +3 -0
  99. package/dist/esm/Validator/index.js +4 -0
  100. package/dist/esm/Validator/index.js.map +1 -0
  101. package/dist/esm/Validator/ip-regex.d.ts +9 -0
  102. package/dist/esm/Validator/ip-regex.js +27 -0
  103. package/dist/esm/Validator/ip-regex.js.map +1 -0
  104. package/dist/esm/Validator/is-ip.d.ts +4 -0
  105. package/dist/esm/Validator/is-ip.js +14 -0
  106. package/dist/esm/Validator/is-ip.js.map +1 -0
  107. package/dist/esm/Wrapper/Wrapper.d.ts +11 -0
  108. package/dist/esm/Wrapper/Wrapper.js +20 -0
  109. package/dist/esm/Wrapper/Wrapper.js.map +1 -0
  110. package/dist/esm/Wrapper/index.d.ts +1 -0
  111. package/dist/esm/Wrapper/index.js +2 -0
  112. package/dist/esm/Wrapper/index.js.map +1 -0
  113. package/dist/esm/index.d.ts +5 -0
  114. package/dist/esm/index.js +6 -0
  115. package/dist/esm/index.js.map +1 -0
  116. package/dist/esm/isXyoPayloadOfSchemaType.d.ts +2 -0
  117. package/dist/esm/isXyoPayloadOfSchemaType.js +3 -0
  118. package/dist/esm/isXyoPayloadOfSchemaType.js.map +1 -0
  119. package/dist/esm/models/Base/XyoBoundWitnessBase.d.ts +9 -0
  120. package/dist/esm/models/Base/XyoBoundWitnessBase.js +2 -0
  121. package/dist/esm/models/Base/XyoBoundWitnessBase.js.map +1 -0
  122. package/dist/esm/models/Base/XyoBoundWitnessBaseSchema.d.ts +36 -0
  123. package/dist/esm/models/Base/XyoBoundWitnessBaseSchema.js +16 -0
  124. package/dist/esm/models/Base/XyoBoundWitnessBaseSchema.js.map +1 -0
  125. package/dist/esm/models/Base/index.d.ts +2 -0
  126. package/dist/esm/models/Base/index.js +3 -0
  127. package/dist/esm/models/Base/index.js.map +1 -0
  128. package/dist/esm/models/Meta/XyoBoundWitnessMeta.d.ts +7 -0
  129. package/dist/esm/models/Meta/XyoBoundWitnessMeta.js +2 -0
  130. package/dist/esm/models/Meta/XyoBoundWitnessMeta.js.map +1 -0
  131. package/dist/esm/models/Meta/XyoBoundWitnessMetaSchema.d.ts +85 -0
  132. package/dist/esm/models/Meta/XyoBoundWitnessMetaSchema.js +23 -0
  133. package/dist/esm/models/Meta/XyoBoundWitnessMetaSchema.js.map +1 -0
  134. package/dist/esm/models/Meta/index.d.ts +2 -0
  135. package/dist/esm/models/Meta/index.js +3 -0
  136. package/dist/esm/models/Meta/index.js.map +1 -0
  137. package/dist/esm/models/WithXyoBoundWitnessMeta.d.ts +4 -0
  138. package/dist/esm/models/WithXyoBoundWitnessMeta.js +2 -0
  139. package/dist/esm/models/WithXyoBoundWitnessMeta.js.map +1 -0
  140. package/dist/esm/models/XyoBoundWitness.d.ts +6 -0
  141. package/dist/esm/models/XyoBoundWitness.js +2 -0
  142. package/dist/esm/models/XyoBoundWitness.js.map +1 -0
  143. package/dist/esm/models/XyoBoundWitnessSchema.d.ts +75 -0
  144. package/dist/esm/models/XyoBoundWitnessSchema.js +21 -0
  145. package/dist/esm/models/XyoBoundWitnessSchema.js.map +1 -0
  146. package/dist/esm/models/index.d.ts +5 -0
  147. package/dist/esm/models/index.js +6 -0
  148. package/dist/esm/models/index.js.map +1 -0
  149. package/jest.config.cjs +25 -0
  150. package/package.json +61 -0
  151. package/src/Builder/Builder.spec.ts +88 -0
  152. package/src/Builder/Builder.ts +83 -0
  153. package/src/Builder/index.ts +1 -0
  154. package/src/Test/index.ts +1 -0
  155. package/src/Test/testBoundWitness.ts +16 -0
  156. package/src/Validator/BodyValidator.spec.ts +11 -0
  157. package/src/Validator/BodyValidator.ts +102 -0
  158. package/src/Validator/MetaValidator.spec.ts +56 -0
  159. package/src/Validator/MetaValidator.ts +71 -0
  160. package/src/Validator/Validator.spec.ts +11 -0
  161. package/src/Validator/Validator.ts +51 -0
  162. package/src/Validator/index.ts +3 -0
  163. package/src/Validator/ip-regex.ts +39 -0
  164. package/src/Validator/is-ip.ts +17 -0
  165. package/src/Wrapper/Wrapper.ts +27 -0
  166. package/src/Wrapper/index.ts +1 -0
  167. package/src/index.ts +5 -0
  168. package/src/isXyoPayloadOfSchemaType.ts +5 -0
  169. package/src/models/Base/XyoBoundWitnessBase.ts +10 -0
  170. package/src/models/Base/XyoBoundWitnessBaseSchema.ts +15 -0
  171. package/src/models/Base/index.ts +2 -0
  172. package/src/models/Meta/XyoBoundWitnessMeta.ts +8 -0
  173. package/src/models/Meta/XyoBoundWitnessMetaSchema.ts +24 -0
  174. package/src/models/Meta/index.ts +2 -0
  175. package/src/models/WithXyoBoundWitnessMeta.ts +6 -0
  176. package/src/models/XyoBoundWitness.ts +8 -0
  177. package/src/models/XyoBoundWitnessSchema.ts +23 -0
  178. package/src/models/index.ts +5 -0
@@ -0,0 +1,5 @@
1
+ export * from './Base';
2
+ export * from './Meta';
3
+ export * from './WithXyoBoundWitnessMeta';
4
+ export * from './XyoBoundWitness';
5
+ export * from './XyoBoundWitnessSchema';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Base"), exports);
5
+ tslib_1.__exportStar(require("./Meta"), exports);
6
+ tslib_1.__exportStar(require("./WithXyoBoundWitnessMeta"), exports);
7
+ tslib_1.__exportStar(require("./XyoBoundWitness"), exports);
8
+ tslib_1.__exportStar(require("./XyoBoundWitnessSchema"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":";;;AAAA,iDAAsB;AACtB,iDAAsB;AACtB,oEAAyC;AACzC,4DAAiC;AACjC,kEAAuC"}
package/dist/docs.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "id": 0,
3
+ "name": "@xyo-network/boundwitness",
4
+ "kind": 1,
5
+ "flags": {},
6
+ "originalName": ""
7
+ }
@@ -0,0 +1,23 @@
1
+ import { XyoAccount } from '@xyo-network/account';
2
+ import { WithAdditional } from '@xyo-network/core';
3
+ import { XyoPayload } from '@xyo-network/payload';
4
+ import { XyoBoundWitness, XyoBoundWitnessWithMeta } from '../models';
5
+ export interface XyoBoundWitnessBuilderConfig {
6
+ /** Whether or not the payloads should be included in the metadata sent to and recorded by the ArchivistApi */
7
+ readonly inlinePayloads?: boolean;
8
+ }
9
+ export declare class XyoBoundWitnessBuilder {
10
+ readonly config: XyoBoundWitnessBuilderConfig;
11
+ private _accounts;
12
+ private _payload_schemas;
13
+ private _payloads;
14
+ constructor(config?: XyoBoundWitnessBuilderConfig);
15
+ private get _payload_hashes();
16
+ witness(account: XyoAccount): this;
17
+ payloads<T extends XyoPayload = WithAdditional<XyoPayload>>(payloads: (T | null)[]): this;
18
+ payload<T extends XyoPayload = WithAdditional<XyoPayload>>(payload?: T): this;
19
+ hashableFields(): XyoBoundWitness;
20
+ private signatures;
21
+ private inlinePayloads;
22
+ build(): XyoBoundWitnessWithMeta;
23
+ }
@@ -0,0 +1,66 @@
1
+ import { assertEx, Buffer } from '@xylabs/sdk-js';
2
+ import { sortFields, XyoHasher } from '@xyo-network/core';
3
+ export class XyoBoundWitnessBuilder {
4
+ constructor(config = { inlinePayloads: false }) {
5
+ this.config = config;
6
+ this._accounts = [];
7
+ this._payload_schemas = [];
8
+ this._payloads = [];
9
+ }
10
+ get _payload_hashes() {
11
+ return this._payloads.map((payload) => {
12
+ return new XyoHasher(payload).hash;
13
+ });
14
+ }
15
+ witness(account) {
16
+ this._accounts?.push(account);
17
+ return this;
18
+ }
19
+ payloads(payloads) {
20
+ payloads.forEach((payload) => {
21
+ if (payload !== null) {
22
+ this.payload(payload);
23
+ }
24
+ });
25
+ return this;
26
+ }
27
+ payload(payload) {
28
+ if (payload) {
29
+ this._payload_schemas.push(payload.schema);
30
+ this._payloads.push(assertEx(sortFields(payload)));
31
+ }
32
+ return this;
33
+ }
34
+ hashableFields() {
35
+ const addresses = this._accounts.map((account) => account.addressValue.hex);
36
+ const previous_hashes = this._accounts.map((account) => account.previousHash?.hex ?? null);
37
+ return {
38
+ addresses: assertEx(addresses, 'Missing addresses'),
39
+ payload_hashes: assertEx(this._payload_hashes, 'Missing payload_hashes'),
40
+ payload_schemas: assertEx(this._payload_schemas, 'Missing payload_schemas'),
41
+ previous_hashes,
42
+ schema: 'network.xyo.boundwitness',
43
+ };
44
+ }
45
+ signatures(_hash) {
46
+ return this._accounts.map((account) => Buffer.from(account.sign(Buffer.from(_hash, 'hex'))).toString('hex'));
47
+ }
48
+ inlinePayloads() {
49
+ return this._payloads.map((payload, index) => {
50
+ return {
51
+ ...payload,
52
+ schema: this._payload_schemas[index],
53
+ };
54
+ });
55
+ }
56
+ build() {
57
+ const hashableFields = this.hashableFields();
58
+ const _hash = new XyoHasher(hashableFields).hash;
59
+ const ret = { ...hashableFields, _client: 'js', _hash, _signatures: this.signatures(_hash), _timestamp: Date.now() };
60
+ if (this.config.inlinePayloads) {
61
+ ret._payloads = this.inlinePayloads();
62
+ }
63
+ return ret;
64
+ }
65
+ }
66
+ //# sourceMappingURL=Builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Builder.js","sourceRoot":"","sources":["../../../src/Builder/Builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './Builder';
@@ -0,0 +1,2 @@
1
+ export * from './Builder';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Builder/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './testBoundWitness';
@@ -0,0 +1,2 @@
1
+ export * from './testBoundWitness';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Test/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { XyoBoundWitnessWithMeta } from '../models';
2
+ declare const testBoundWitness: XyoBoundWitnessWithMeta;
3
+ export { testBoundWitness };
@@ -0,0 +1,14 @@
1
+ const testBoundWitness = {
2
+ _archive: 'temp',
3
+ _client: 'js',
4
+ _hash: 'b0ffb9ebf872dc316b7be48327256c5316f7cb84d7c706861b18b86af1942dea',
5
+ _signatures: ['95100e5fd2012b958e96895870cfac5353c3a33a19314cfd1304ef7d01d052ec2a3ef80d6449cf88d463027fe0d868ed8cfb8b7323d37e93a08570233eea0b17'],
6
+ _timestamp: 1650067385598,
7
+ addresses: ['5346a2ce56ec4177b67092bda710e150ba6fa046'],
8
+ payload_hashes: ['20e14207f952a09f767ff614a648546c037fe524ace0bfe55db31f818aff1f1c'],
9
+ payload_schemas: ['network.xyo.test'],
10
+ previous_hashes: [null],
11
+ schema: 'network.xyo.boundwitness',
12
+ };
13
+ export { testBoundWitness };
14
+ //# sourceMappingURL=testBoundWitness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testBoundWitness.js","sourceRoot":"","sources":["../../../src/Test/testBoundWitness.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAA4B;IAChD,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,kEAAkE;IACzE,WAAW,EAAE,CAAC,kIAAkI,CAAC;IACjJ,UAAU,EAAE,aAAa;IACzB,SAAS,EAAE,CAAC,0CAA0C,CAAC;IACvD,cAAc,EAAE,CAAC,kEAAkE,CAAC;IACpF,eAAe,EAAE,CAAC,kBAAkB,CAAC;IACrC,eAAe,EAAE,CAAC,IAAI,CAAC;IACvB,MAAM,EAAE,0BAA0B;CACnC,CAAA;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { XyoValidator } from '@xyo-network/core';
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ import { XyoBoundWitness } from '../models';
4
+ export declare class XyoBoundWitnessBodyValidator<T extends XyoBoundWitness = XyoBoundWitness> extends XyoValidator<T> {
5
+ private payloads?;
6
+ constructor(boundWitness: T, payloads?: XyoPayload[]);
7
+ addressesUniqueness(): Error[];
8
+ addresses(): Error[];
9
+ private validateArrayLength;
10
+ validatePayloadHashesLength(): Error[];
11
+ validateArrayLengths(): Error[];
12
+ payloadHashes(): Error[];
13
+ payloadSchemas(): Error[];
14
+ previousHashes(): Error[];
15
+ schema(): Error[];
16
+ validate(): Error[];
17
+ }
@@ -0,0 +1,88 @@
1
+ import { XyoHasher, XyoValidator } from '@xyo-network/core';
2
+ import { XyoSchemaNameValidator } from '@xyo-network/payload';
3
+ import { validateType } from '@xyo-network/typeof';
4
+ import uniq from 'lodash/uniq';
5
+ export class XyoBoundWitnessBodyValidator extends XyoValidator {
6
+ constructor(boundWitness, payloads) {
7
+ super(boundWitness);
8
+ this.payloads = payloads;
9
+ }
10
+ addressesUniqueness() {
11
+ const errors = [];
12
+ const { addresses } = this.obj;
13
+ const uniqAddresses = uniq(addresses);
14
+ if (addresses?.length !== uniqAddresses?.length)
15
+ errors.push(new Error('addresses must be unique'));
16
+ return errors;
17
+ }
18
+ addresses() {
19
+ const errors = [];
20
+ const { addresses } = this.obj;
21
+ if (!addresses?.length)
22
+ errors.push(new Error('addresses missing [at least one address required]'));
23
+ errors.push(...this.addressesUniqueness());
24
+ return errors;
25
+ }
26
+ validateArrayLength(fieldName, compareArrayName) {
27
+ const errors = [];
28
+ const [array, arrayErrors] = validateType('array', this.stringKeyObj[fieldName], true);
29
+ const [compareArray, compareArrayErrors] = validateType('array', this.stringKeyObj[compareArrayName], true);
30
+ if (array?.length !== compareArray?.length) {
31
+ errors.push(new Error(`${fieldName}/${compareArrayName} count mismatch [${array?.length} !== ${compareArray?.length}]`));
32
+ }
33
+ return [...arrayErrors, ...compareArrayErrors, ...errors];
34
+ }
35
+ validatePayloadHashesLength() {
36
+ const errors = [];
37
+ errors.push(...this.validateArrayLength('payload_hashes', 'payload_schemas'));
38
+ return errors;
39
+ }
40
+ validateArrayLengths() {
41
+ const errors = [];
42
+ errors.push(...this.validatePayloadHashesLength());
43
+ return errors;
44
+ }
45
+ payloadHashes() {
46
+ const errors = [];
47
+ const passedHashes = this.obj.payload_hashes;
48
+ this.payloads?.forEach((payload, index) => {
49
+ const calcHash = new XyoHasher(payload).hash;
50
+ const passedHash = passedHashes?.[index];
51
+ if (calcHash !== passedHash) {
52
+ errors.push(new Error(`hash mismatch [${calcHash} !== ${passedHash}]`));
53
+ }
54
+ });
55
+ return errors;
56
+ }
57
+ payloadSchemas() {
58
+ const errors = [];
59
+ const payloadSchemas = this.obj.payload_schemas;
60
+ if (payloadSchemas) {
61
+ const schemaValidators = payloadSchemas.map((schema) => {
62
+ return new XyoSchemaNameValidator(schema);
63
+ });
64
+ schemaValidators.forEach((validator) => {
65
+ errors.push(...validator.all());
66
+ });
67
+ }
68
+ return errors;
69
+ }
70
+ previousHashes() {
71
+ const errors = [];
72
+ return errors;
73
+ }
74
+ schema() {
75
+ const errors = [];
76
+ const expectedSchema = 'network.xyo.boundwitness';
77
+ if (this.obj.schema !== expectedSchema) {
78
+ errors.push(new Error(`invalid schema [${expectedSchema} !== ${this.obj.schema}]`));
79
+ }
80
+ return errors;
81
+ }
82
+ validate() {
83
+ const errors = [];
84
+ errors.push(...this.addresses(), ...this.validateArrayLengths(), ...this.payloadHashes(), ...this.payloadSchemas(), ...this.previousHashes(), ...this.schema());
85
+ return errors;
86
+ }
87
+ }
88
+ //# sourceMappingURL=BodyValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BodyValidator.js","sourceRoot":"","sources":["../../../src/Validator/BodyValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { XyoValidator } from '@xyo-network/core';
2
+ import { XyoBoundWitnessMeta } from '../models';
3
+ export declare class XyoBoundWitnessMetaValidator<T extends Partial<XyoBoundWitnessMeta> = Partial<XyoBoundWitnessMeta>> extends XyoValidator<T> {
4
+ client(): Error[];
5
+ hash(): Error[];
6
+ payloads(): Error[];
7
+ signatures(): Error[];
8
+ timestamp(): Error[];
9
+ sourceIp(): Error[];
10
+ userAgent(): Error[];
11
+ validate(): Error[];
12
+ meta(): Error[];
13
+ }
@@ -0,0 +1,63 @@
1
+ import { XyoHasher, XyoValidator } from '@xyo-network/core';
2
+ import { isIP } from './is-ip';
3
+ const MIN_ALLOWED_TIMESTAMP = 1609459200000;
4
+ const MAX_ALLOWED_TIMESTAMP = 4102444800000;
5
+ export class XyoBoundWitnessMetaValidator extends XyoValidator {
6
+ client() {
7
+ const errors = [];
8
+ return errors;
9
+ }
10
+ hash() {
11
+ const errors = [];
12
+ const hasher = new XyoHasher(this.obj);
13
+ const bodyHash = hasher.hash;
14
+ if (bodyHash !== this.obj._hash)
15
+ errors.push(new Error(`Body hash mismatch: [calculated: ${bodyHash}] [found: ${this.obj._hash}] [sortedStringify: ${hasher.stringified}]`));
16
+ return errors;
17
+ }
18
+ payloads() {
19
+ const errors = [];
20
+ return errors;
21
+ }
22
+ signatures() {
23
+ const errors = [];
24
+ return errors;
25
+ }
26
+ timestamp() {
27
+ const errors = [];
28
+ const { _timestamp } = this.obj;
29
+ if (_timestamp === undefined)
30
+ errors.push(new Error('Missing _timestamp'));
31
+ else if (_timestamp < MIN_ALLOWED_TIMESTAMP)
32
+ errors.push(new Error('_timestamp is before year 2021'));
33
+ else if (_timestamp > MAX_ALLOWED_TIMESTAMP)
34
+ errors.push(new Error('_timestamp is after year 2100'));
35
+ return errors;
36
+ }
37
+ sourceIp() {
38
+ const errors = [];
39
+ const { _source_ip } = this.obj;
40
+ if (_source_ip && !isIP(_source_ip)) {
41
+ errors.push(new Error(`_source_ip invalid format [${_source_ip}]`));
42
+ }
43
+ return errors;
44
+ }
45
+ userAgent() {
46
+ const errors = [];
47
+ const { _user_agent } = this.obj;
48
+ if (!_user_agent)
49
+ errors.push(new Error('_user_agent missing'));
50
+ return errors;
51
+ }
52
+ validate() {
53
+ const errors = [];
54
+ errors.push(...this.client(), ...this.hash(), ...this.payloads(), ...this.signatures());
55
+ return errors;
56
+ }
57
+ meta() {
58
+ const errors = [];
59
+ errors.push(...this.timestamp(), ...this.sourceIp(), ...this.userAgent());
60
+ return errors;
61
+ }
62
+ }
63
+ //# sourceMappingURL=MetaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaValidator.js","sourceRoot":"","sources":["../../../src/Validator/MetaValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { XyoValidator } from '@xyo-network/core';
2
+ import { XyoBoundWitnessWithPartialMeta } from '../models';
3
+ import { XyoBoundWitnessBodyValidator } from './BodyValidator';
4
+ import { XyoBoundWitnessMetaValidator } from './MetaValidator';
5
+ declare class XyoBoundWitnessValidator<T extends XyoBoundWitnessWithPartialMeta = XyoBoundWitnessWithPartialMeta> extends XyoValidator<T> {
6
+ body: XyoBoundWitnessBodyValidator;
7
+ meta: XyoBoundWitnessMetaValidator;
8
+ constructor(bw: T);
9
+ signatures(): Error[];
10
+ validate(): Error[];
11
+ }
12
+ export { XyoBoundWitnessValidator };
@@ -0,0 +1,42 @@
1
+ import { assertEx } from '@xylabs/sdk-js';
2
+ import { XyoAddressValue } from '@xyo-network/account';
3
+ import { XyoValidator } from '@xyo-network/core';
4
+ import { XyoBoundWitnessBodyValidator } from './BodyValidator';
5
+ import { XyoBoundWitnessMetaValidator } from './MetaValidator';
6
+ const validateArraysSameLength = (a, b, message = 'Array length mismatch') => {
7
+ return a.length != b.length ? [Error(`${message} []`)] : [];
8
+ };
9
+ const validateSignature = (hash, address, signature) => {
10
+ if (!signature) {
11
+ return [Error(`Missing signature [${address}]`)];
12
+ }
13
+ if (!new XyoAddressValue(address).verify(hash, signature)) {
14
+ return [Error(`Invalid signature [${address}] [${signature}]`)];
15
+ }
16
+ return [];
17
+ };
18
+ class XyoBoundWitnessValidator extends XyoValidator {
19
+ constructor(bw) {
20
+ super(bw);
21
+ this.body = new XyoBoundWitnessBodyValidator(bw, bw._payloads);
22
+ this.meta = new XyoBoundWitnessMetaValidator(bw);
23
+ }
24
+ signatures() {
25
+ const hash = assertEx(this.obj._hash, 'Missing _hash');
26
+ return [
27
+ ...validateArraysSameLength(this.obj._signatures ?? [], this.obj.addresses, 'Length mismatch: address/_signature'),
28
+ ...this.obj.addresses.reduce((errors, address, index) => {
29
+ errors.push(...validateSignature(hash, address, this.obj._signatures?.[index]));
30
+ return errors;
31
+ }, []),
32
+ ];
33
+ }
34
+ validate() {
35
+ const errors = [];
36
+ errors.push(...this.meta.validate(), ...this.body.validate());
37
+ errors.push(...this.signatures());
38
+ return errors;
39
+ }
40
+ }
41
+ export { XyoBoundWitnessValidator };
42
+ //# sourceMappingURL=Validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../src/Validator/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAE9D,MAAM,wBAAwB,GAAG,CAAC,CAAY,EAAE,CAAY,EAAE,OAAO,GAAG,uBAAuB,EAAE,EAAE;IACjG,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,SAAkB,EAAE,EAAE;IAC9E,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,GAAG,CAAC,CAAC,CAAA;KACjD;IACD,IAAI,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;QACzD,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,MAAM,SAAS,GAAG,CAAC,CAAC,CAAA;KAChE;IACD,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,wBAAoG,SAAQ,YAAe;IAG/H,YAAY,EAAK;QACf,KAAK,CAAC,EAAE,CAAC,CAAA;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,4BAA4B,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,GAAG,IAAI,4BAA4B,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC;IAEM,UAAU;QACf,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;QACtD,OAAO;YACL,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,qCAAqC,CAAC;YAClH,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC/E,OAAO,MAAM,CAAA;YACf,CAAC,EAAE,EAAE,CAAC;SACP,CAAA;IACH,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QACjC,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './BodyValidator';
2
+ export * from './MetaValidator';
3
+ export * from './Validator';
@@ -0,0 +1,4 @@
1
+ export * from './BodyValidator';
2
+ export * from './MetaValidator';
3
+ export * from './Validator';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA"}
@@ -0,0 +1,9 @@
1
+ export interface Options {
2
+ readonly exact?: boolean;
3
+ readonly includeBoundaries?: boolean;
4
+ }
5
+ export declare const ipRegex: {
6
+ (options: Options): RegExp;
7
+ v4(options: Options): RegExp;
8
+ v6(options: Options): RegExp;
9
+ };
@@ -0,0 +1,27 @@
1
+ const word = '[a-fA-F\\d:]';
2
+ const boundry = (options) => (options && options.includeBoundaries ? `(?:(?<=\\s|^)(?=${word})|(?<=${word})(?=\\s|$))` : '');
3
+ const v4 = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}';
4
+ const v6segment = '[a-fA-F\\d]{1,4}';
5
+ const v6 = `
6
+ (?:
7
+ (?:${v6segment}:){7}(?:${v6segment}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
8
+ (?:${v6segment}:){6}(?:${v4}|:${v6segment}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
9
+ (?:${v6segment}:){5}(?::${v4}|(?::${v6segment}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
10
+ (?:${v6segment}:){4}(?:(?::${v6segment}){0,1}:${v4}|(?::${v6segment}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
11
+ (?:${v6segment}:){3}(?:(?::${v6segment}){0,2}:${v4}|(?::${v6segment}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
12
+ (?:${v6segment}:){2}(?:(?::${v6segment}){0,3}:${v4}|(?::${v6segment}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
13
+ (?:${v6segment}:){1}(?:(?::${v6segment}){0,4}:${v4}|(?::${v6segment}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
14
+ (?::(?:(?::${v6segment}){0,5}:${v4}|(?::${v6segment}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
15
+ )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
16
+ `
17
+ .replace(/\s*\/\/.*$/gm, '')
18
+ .replace(/\n/g, '')
19
+ .trim();
20
+ // Pre-compile only the exact regexes because adding a global flag make regexes stateful
21
+ const v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);
22
+ const v4exact = new RegExp(`^${v4}$`);
23
+ const v6exact = new RegExp(`^${v6}$`);
24
+ export const ipRegex = (options) => options && options.exact ? v46Exact : new RegExp(`(?:${boundry(options)}${v4}${boundry(options)})|(?:${boundry(options)}${v6}${boundry(options)})`, 'g');
25
+ ipRegex.v4 = (options) => (options && options.exact ? v4exact : new RegExp(`${boundry(options)}${v4}${boundry(options)}`, 'g'));
26
+ ipRegex.v6 = (options) => (options && options.exact ? v6exact : new RegExp(`${boundry(options)}${v6}${boundry(options)}`, 'g'));
27
+ //# sourceMappingURL=ip-regex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip-regex.js","sourceRoot":"","sources":["../../../src/Validator/ip-regex.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,cAAc,CAAA;AAO3B,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,IAAI,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAErI,MAAM,EAAE,GAAG,gGAAgG,CAAA;AAE3G,MAAM,SAAS,GAAG,kBAAkB,CAAA;AAEpC,MAAM,EAAE,GAAG;;KAEN,SAAS,WAAW,SAAS;KAC7B,SAAS,WAAW,EAAE,KAAK,SAAS;KACpC,SAAS,YAAY,EAAE,QAAQ,SAAS;KACxC,SAAS,eAAe,SAAS,UAAU,EAAE,QAAQ,SAAS;KAC9D,SAAS,eAAe,SAAS,UAAU,EAAE,QAAQ,SAAS;KAC9D,SAAS,eAAe,SAAS,UAAU,EAAE,QAAQ,SAAS;KAC9D,SAAS,eAAe,SAAS,UAAU,EAAE,QAAQ,SAAS;aACtD,SAAS,UAAU,EAAE,QAAQ,SAAS;;CAElD;KACE,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;KAC3B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;KAClB,IAAI,EAAE,CAAA;AAET,wFAAwF;AACxF,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;AACtD,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AACrC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAErC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC1C,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAE1J,OAAO,CAAC,EAAE,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA;AACxI,OAAO,CAAC,EAAE,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare function isIP(value: string): boolean;
2
+ export declare function isIPv6(value: string): boolean;
3
+ export declare function isIPv4(value: string): boolean;
4
+ export declare function ipVersion(value: string): 6 | 4 | undefined;
@@ -0,0 +1,14 @@
1
+ import { ipRegex } from './ip-regex';
2
+ export function isIP(value) {
3
+ return ipRegex({ exact: true }).test(value);
4
+ }
5
+ export function isIPv6(value) {
6
+ return ipRegex.v6({ exact: true }).test(value);
7
+ }
8
+ export function isIPv4(value) {
9
+ return ipRegex.v4({ exact: true }).test(value);
10
+ }
11
+ export function ipVersion(value) {
12
+ return isIP(value) ? (isIPv6(value) ? 6 : 4) : undefined;
13
+ }
14
+ //# sourceMappingURL=is-ip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-ip.js","sourceRoot":"","sources":["../../../src/Validator/is-ip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { XyoHasher } from '@xyo-network/core';
2
+ import { XyoBoundWitness, XyoBoundWitnessWithMeta } from '../models';
3
+ export declare class XyoBoundWitnessWrapper<T extends XyoBoundWitness> extends XyoHasher<T> {
4
+ readonly bw: T;
5
+ constructor(bw: T);
6
+ get scrubbedFields(): Partial<T>;
7
+ }
8
+ export declare class XyoBoundWitnessWithMetaWrapper<T extends XyoBoundWitnessWithMeta> extends XyoBoundWitnessWrapper<T> {
9
+ private _userAgent?;
10
+ get userAgent(): import("ua-parser-js").UAParserInstance;
11
+ }
@@ -0,0 +1,20 @@
1
+ import { XyoHasher } from '@xyo-network/core';
2
+ import pick from 'lodash/pick';
3
+ import { UAParser } from 'ua-parser-js';
4
+ const scrubbedFields = ['_archive', '_client', '_hash', '_signatures', '_timestamp', '_user_agent', 'addresses', 'payload_schemas', 'previous_hashes', 'payload_hashes', 'schema'];
5
+ export class XyoBoundWitnessWrapper extends XyoHasher {
6
+ constructor(bw) {
7
+ super(bw);
8
+ this.bw = bw;
9
+ }
10
+ get scrubbedFields() {
11
+ return pick(this.bw, scrubbedFields);
12
+ }
13
+ }
14
+ export class XyoBoundWitnessWithMetaWrapper extends XyoBoundWitnessWrapper {
15
+ get userAgent() {
16
+ this._userAgent = this._userAgent ?? new UAParser(this.bw._user_agent);
17
+ return this._userAgent;
18
+ }
19
+ }
20
+ //# sourceMappingURL=Wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../src/Wrapper/Wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAIvC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAA;AAElL,MAAM,OAAO,sBAAkD,SAAQ,SAAY;IAEjF,YAAY,EAAK;QACf,KAAK,CAAC,EAAE,CAAC,CAAA;QACT,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;IACtC,CAAC;CACF;AAED,MAAM,OAAO,8BAAkE,SAAQ,sBAAyB;IAE9G,IAAI,SAAS;QACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QACtE,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from './Wrapper';
@@ -0,0 +1,2 @@
1
+ export * from './Wrapper';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Wrapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './Builder';
2
+ export * from './isXyoPayloadOfSchemaType';
3
+ export * from './models';
4
+ export * from './Validator';
5
+ export * from './Wrapper';
@@ -0,0 +1,6 @@
1
+ export * from './Builder';
2
+ export * from './isXyoPayloadOfSchemaType';
3
+ export * from './models';
4
+ export * from './Validator';
5
+ export * from './Wrapper';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { XyoBoundWitness } from './models';
2
+ export declare const isXyoBoundWitnessPayload: (x: import("@xyo-network/payload").XyoPayload<object>) => x is XyoBoundWitness<object>;
@@ -0,0 +1,3 @@
1
+ import { isXyoPayloadOfSchemaType } from '@xyo-network/payload';
2
+ export const isXyoBoundWitnessPayload = isXyoPayloadOfSchemaType('network.xyo.boundwitness');
3
+ //# sourceMappingURL=isXyoPayloadOfSchemaType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isXyoPayloadOfSchemaType.js","sourceRoot":"","sources":["../../src/isXyoPayloadOfSchemaType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAI/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAkB,0BAA0B,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { XyoPayload } from '@xyo-network/payload';
2
+ export declare type XyoBoundWitnessBase = XyoPayload<{
3
+ addresses: string[];
4
+ previous_hash?: string;
5
+ payload_hashes: string[];
6
+ payload_schemas: string[];
7
+ previous_hashes: (string | null)[];
8
+ schema: string;
9
+ }>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=XyoBoundWitnessBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XyoBoundWitnessBase.js","sourceRoot":"","sources":["../../../../src/models/Base/XyoBoundWitnessBase.ts"],"names":[],"mappings":""}