@xyo-network/payload 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 (179) 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 +15 -0
  5. package/dist/cjs/Builder/Builder.js +31 -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/Huri/Huri.d.ts +29 -0
  11. package/dist/cjs/Huri/Huri.js +111 -0
  12. package/dist/cjs/Huri/Huri.js.map +1 -0
  13. package/dist/cjs/Huri/index.d.ts +1 -0
  14. package/dist/cjs/Huri/index.js +5 -0
  15. package/dist/cjs/Huri/index.js.map +1 -0
  16. package/dist/cjs/Query/QueryPayload.d.ts +11 -0
  17. package/dist/cjs/Query/QueryPayload.js +3 -0
  18. package/dist/cjs/Query/QueryPayload.js.map +1 -0
  19. package/dist/cjs/Query/index.d.ts +1 -0
  20. package/dist/cjs/Query/index.js +5 -0
  21. package/dist/cjs/Query/index.js.map +1 -0
  22. package/dist/cjs/Schema/Payload.d.ts +10 -0
  23. package/dist/cjs/Schema/Payload.js +3 -0
  24. package/dist/cjs/Schema/Payload.js.map +1 -0
  25. package/dist/cjs/Schema/index.d.ts +1 -0
  26. package/dist/cjs/Schema/index.js +5 -0
  27. package/dist/cjs/Schema/index.js.map +1 -0
  28. package/dist/cjs/SchemaNameValidator.d.ts +73 -0
  29. package/dist/cjs/SchemaNameValidator.js +135 -0
  30. package/dist/cjs/SchemaNameValidator.js.map +1 -0
  31. package/dist/cjs/Test/index.d.ts +1 -0
  32. package/dist/cjs/Test/index.js +5 -0
  33. package/dist/cjs/Test/index.js.map +1 -0
  34. package/dist/cjs/Test/testPayload.d.ts +5 -0
  35. package/dist/cjs/Test/testPayload.js +19 -0
  36. package/dist/cjs/Test/testPayload.js.map +1 -0
  37. package/dist/cjs/Validator/BodyValidator.d.ts +9 -0
  38. package/dist/cjs/Validator/BodyValidator.js +29 -0
  39. package/dist/cjs/Validator/BodyValidator.js.map +1 -0
  40. package/dist/cjs/Validator/MetaValidator.d.ts +8 -0
  41. package/dist/cjs/Validator/MetaValidator.js +34 -0
  42. package/dist/cjs/Validator/MetaValidator.js.map +1 -0
  43. package/dist/cjs/Validator/Validator.d.ts +10 -0
  44. package/dist/cjs/Validator/Validator.js +20 -0
  45. package/dist/cjs/Validator/Validator.js.map +1 -0
  46. package/dist/cjs/Validator/index.d.ts +3 -0
  47. package/dist/cjs/Validator/index.js +7 -0
  48. package/dist/cjs/Validator/index.js.map +1 -0
  49. package/dist/cjs/Wrapper/Validator.d.ts +8 -0
  50. package/dist/cjs/Wrapper/Validator.js +17 -0
  51. package/dist/cjs/Wrapper/Validator.js.map +1 -0
  52. package/dist/cjs/Wrapper/Wrapper.d.ts +9 -0
  53. package/dist/cjs/Wrapper/Wrapper.js +27 -0
  54. package/dist/cjs/Wrapper/Wrapper.js.map +1 -0
  55. package/dist/cjs/Wrapper/index.d.ts +2 -0
  56. package/dist/cjs/Wrapper/index.js +6 -0
  57. package/dist/cjs/Wrapper/index.js.map +1 -0
  58. package/dist/cjs/index.d.ts +9 -0
  59. package/dist/cjs/index.js +13 -0
  60. package/dist/cjs/index.js.map +1 -0
  61. package/dist/cjs/isXyoPayloadOfSchemaType.d.ts +4 -0
  62. package/dist/cjs/isXyoPayloadOfSchemaType.js +9 -0
  63. package/dist/cjs/isXyoPayloadOfSchemaType.js.map +1 -0
  64. package/dist/cjs/models/Base.d.ts +6 -0
  65. package/dist/cjs/models/Base.js +3 -0
  66. package/dist/cjs/models/Base.js.map +1 -0
  67. package/dist/cjs/models/Meta.d.ts +24 -0
  68. package/dist/cjs/models/Meta.js +3 -0
  69. package/dist/cjs/models/Meta.js.map +1 -0
  70. package/dist/cjs/models/XyoPayload.d.ts +2 -0
  71. package/dist/cjs/models/XyoPayload.js +3 -0
  72. package/dist/cjs/models/XyoPayload.js.map +1 -0
  73. package/dist/cjs/models/index.d.ts +3 -0
  74. package/dist/cjs/models/index.js +7 -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 +15 -0
  78. package/dist/esm/Builder/Builder.js +30 -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/Huri/Huri.d.ts +29 -0
  84. package/dist/esm/Huri/Huri.js +99 -0
  85. package/dist/esm/Huri/Huri.js.map +1 -0
  86. package/dist/esm/Huri/index.d.ts +1 -0
  87. package/dist/esm/Huri/index.js +2 -0
  88. package/dist/esm/Huri/index.js.map +1 -0
  89. package/dist/esm/Query/QueryPayload.d.ts +11 -0
  90. package/dist/esm/Query/QueryPayload.js +2 -0
  91. package/dist/esm/Query/QueryPayload.js.map +1 -0
  92. package/dist/esm/Query/index.d.ts +1 -0
  93. package/dist/esm/Query/index.js +2 -0
  94. package/dist/esm/Query/index.js.map +1 -0
  95. package/dist/esm/Schema/Payload.d.ts +10 -0
  96. package/dist/esm/Schema/Payload.js +2 -0
  97. package/dist/esm/Schema/Payload.js.map +1 -0
  98. package/dist/esm/Schema/index.d.ts +1 -0
  99. package/dist/esm/Schema/index.js +2 -0
  100. package/dist/esm/Schema/index.js.map +1 -0
  101. package/dist/esm/SchemaNameValidator.d.ts +73 -0
  102. package/dist/esm/SchemaNameValidator.js +117 -0
  103. package/dist/esm/SchemaNameValidator.js.map +1 -0
  104. package/dist/esm/Test/index.d.ts +1 -0
  105. package/dist/esm/Test/index.js +2 -0
  106. package/dist/esm/Test/index.js.map +1 -0
  107. package/dist/esm/Test/testPayload.d.ts +5 -0
  108. package/dist/esm/Test/testPayload.js +15 -0
  109. package/dist/esm/Test/testPayload.js.map +1 -0
  110. package/dist/esm/Validator/BodyValidator.d.ts +9 -0
  111. package/dist/esm/Validator/BodyValidator.js +24 -0
  112. package/dist/esm/Validator/BodyValidator.js.map +1 -0
  113. package/dist/esm/Validator/MetaValidator.d.ts +8 -0
  114. package/dist/esm/Validator/MetaValidator.js +31 -0
  115. package/dist/esm/Validator/MetaValidator.js.map +1 -0
  116. package/dist/esm/Validator/Validator.d.ts +10 -0
  117. package/dist/esm/Validator/Validator.js +16 -0
  118. package/dist/esm/Validator/Validator.js.map +1 -0
  119. package/dist/esm/Validator/index.d.ts +3 -0
  120. package/dist/esm/Validator/index.js +4 -0
  121. package/dist/esm/Validator/index.js.map +1 -0
  122. package/dist/esm/Wrapper/Validator.d.ts +8 -0
  123. package/dist/esm/Wrapper/Validator.js +13 -0
  124. package/dist/esm/Wrapper/Validator.js.map +1 -0
  125. package/dist/esm/Wrapper/Wrapper.d.ts +9 -0
  126. package/dist/esm/Wrapper/Wrapper.js +20 -0
  127. package/dist/esm/Wrapper/Wrapper.js.map +1 -0
  128. package/dist/esm/Wrapper/index.d.ts +2 -0
  129. package/dist/esm/Wrapper/index.js +3 -0
  130. package/dist/esm/Wrapper/index.js.map +1 -0
  131. package/dist/esm/index.d.ts +9 -0
  132. package/dist/esm/index.js +10 -0
  133. package/dist/esm/index.js.map +1 -0
  134. package/dist/esm/isXyoPayloadOfSchemaType.d.ts +4 -0
  135. package/dist/esm/isXyoPayloadOfSchemaType.js +5 -0
  136. package/dist/esm/isXyoPayloadOfSchemaType.js.map +1 -0
  137. package/dist/esm/models/Base.d.ts +6 -0
  138. package/dist/esm/models/Base.js +2 -0
  139. package/dist/esm/models/Base.js.map +1 -0
  140. package/dist/esm/models/Meta.d.ts +24 -0
  141. package/dist/esm/models/Meta.js +2 -0
  142. package/dist/esm/models/Meta.js.map +1 -0
  143. package/dist/esm/models/XyoPayload.d.ts +2 -0
  144. package/dist/esm/models/XyoPayload.js +2 -0
  145. package/dist/esm/models/XyoPayload.js.map +1 -0
  146. package/dist/esm/models/index.d.ts +3 -0
  147. package/dist/esm/models/index.js +4 -0
  148. package/dist/esm/models/index.js.map +1 -0
  149. package/jest.config.cjs +25 -0
  150. package/package.json +56 -0
  151. package/src/Builder/Builder.spec.ts +37 -0
  152. package/src/Builder/Builder.ts +43 -0
  153. package/src/Builder/index.ts +1 -0
  154. package/src/Huri/Huri.spec.ts +92 -0
  155. package/src/Huri/Huri.ts +155 -0
  156. package/src/Huri/index.ts +1 -0
  157. package/src/Query/QueryPayload.ts +15 -0
  158. package/src/Query/index.ts +1 -0
  159. package/src/Schema/Payload.ts +11 -0
  160. package/src/Schema/index.ts +1 -0
  161. package/src/SchemaNameValidator.ts +128 -0
  162. package/src/Test/index.ts +1 -0
  163. package/src/Test/testPayload.ts +19 -0
  164. package/src/Validator/BodyValidator.spec.ts +11 -0
  165. package/src/Validator/BodyValidator.ts +28 -0
  166. package/src/Validator/MetaValidator.spec.ts +11 -0
  167. package/src/Validator/MetaValidator.ts +34 -0
  168. package/src/Validator/Validator.spec.ts +63 -0
  169. package/src/Validator/Validator.ts +21 -0
  170. package/src/Validator/index.ts +3 -0
  171. package/src/Wrapper/Validator.ts +17 -0
  172. package/src/Wrapper/Wrapper.ts +25 -0
  173. package/src/Wrapper/index.ts +2 -0
  174. package/src/index.ts +9 -0
  175. package/src/isXyoPayloadOfSchemaType.ts +8 -0
  176. package/src/models/Base.ts +6 -0
  177. package/src/models/Meta.ts +28 -0
  178. package/src/models/XyoPayload.ts +3 -0
  179. package/src/models/index.ts +3 -0
@@ -0,0 +1,128 @@
1
+ import { domainExists } from '@xyo-network/core'
2
+
3
+ /**
4
+ * Validates a XYO schema structure and existence
5
+ */
6
+ export class XyoSchemaNameValidator {
7
+ public schema?: string
8
+ constructor(schema?: string) {
9
+ this.schema = schema
10
+ }
11
+
12
+ private _parts?: string[]
13
+
14
+ /**
15
+ * The schema converted into a string array split on '.'
16
+ *
17
+ * @returns string[]
18
+ */
19
+ get parts() {
20
+ this._parts = this._parts ?? this.schema?.split('.')
21
+ return this._parts
22
+ }
23
+
24
+ /**
25
+ * Levels in the schema
26
+ *
27
+ * @returns number
28
+ */
29
+ get levels(): number | undefined {
30
+ return this.parts?.length
31
+ }
32
+
33
+ /**
34
+ * Checks whether the schema is all lowercase
35
+ *
36
+ * @returns boolean
37
+ */
38
+ get isLowercase(): boolean {
39
+ return this.schema === this.schema?.toLowerCase()
40
+ }
41
+
42
+ /**
43
+ *
44
+ * Get a domain for the schema at a certain level
45
+ *
46
+ * @param level - Zero based level to check
47
+ * @returns string
48
+ */
49
+ private domainLevel(level: number): string | undefined {
50
+ return this.parts
51
+ ?.slice(0, level + 1)
52
+ .reverse()
53
+ .join('.')
54
+ }
55
+
56
+ private _rootDomain?: string
57
+
58
+ /**
59
+ * The rootDomain is the first two levels of the schema, in reverse order
60
+ * This can be used to determine who 'owns' that schema, based on domain
61
+ * registration
62
+ *
63
+ * @returns string
64
+ */
65
+ get rootDomain(): string | undefined {
66
+ this._rootDomain = this._rootDomain ?? this.domainLevel(1)
67
+ return this._rootDomain
68
+ }
69
+
70
+ /**
71
+ * Checks if the root domain validates via DNS resolution
72
+ *
73
+ * @returns boolean
74
+ */
75
+ public async rootDomainExists() {
76
+ return await domainExists(this.rootDomain)
77
+ }
78
+
79
+ /**
80
+ * Determines how many levels of the schema's reverse domain
81
+ * pass DNS resolution
82
+ *
83
+ * @returns number (0 if none exist)
84
+ */
85
+ public async domainExistanceDepth() {
86
+ const levels = this.levels ?? 0
87
+ let level = 0
88
+ while (level < levels) {
89
+ if (!(await domainExists(this.domainLevel(level)))) {
90
+ break
91
+ }
92
+ level += 1
93
+ }
94
+ return level
95
+ }
96
+
97
+ /**
98
+ * Run all the validations
99
+ * @param checkExistance - boolean
100
+ * @returns Error[]
101
+ */
102
+
103
+ public async allDynamic() {
104
+ const errors: Error[] = []
105
+ if ((this.schema?.length ?? 0) === 0) errors.push(Error('schema missing'))
106
+ else if (!(await this.rootDomainExists())) errors.push(Error(`schema root domain must exist [${this.rootDomain}]`))
107
+ return errors
108
+ }
109
+
110
+ /**
111
+ * Run all static validations
112
+ * @returns Error[]
113
+ */
114
+
115
+ public all() {
116
+ const errors: Error[] = []
117
+ if ((this.schema?.length ?? 0) === 0) errors.push(Error('schema missing'))
118
+ else if ((this.levels ?? 0) < 3) errors.push(Error(`schema levels < 3 [${this.levels}, ${this.schema}]`))
119
+ else if (!this.isLowercase) errors.push(Error(`schema not lowercase [${this.schema}]`))
120
+ return errors
121
+ }
122
+ }
123
+
124
+ /** @deprectated use XyoSchemaNameValidator instead */
125
+ export class SchemaValidator extends XyoSchemaNameValidator {}
126
+
127
+ /** @deprectated use XyoSchemaNameValidator instead */
128
+ export class XyoSchemaValidator extends XyoSchemaNameValidator {}
@@ -0,0 +1 @@
1
+ export * from './testPayload'
@@ -0,0 +1,19 @@
1
+ import { WithAdditional } from '@xyo-network/core'
2
+
3
+ import { XyoPayloadWithMeta } from '../models'
4
+
5
+ const testSchema = 'network.xyo.test'
6
+ const testPayload: WithAdditional<XyoPayloadWithMeta> = {
7
+ _archive: 'test',
8
+ _hash: '20e14207f952a09f767ff614a648546c037fe524ace0bfe55db31f818aff1f1c',
9
+ _timestamp: 1609459255555,
10
+ numberField: 1,
11
+ objectField: {
12
+ numberField: 1,
13
+ stringField: 'stringValue',
14
+ },
15
+ schema: testSchema,
16
+ stringField: 'stringValue',
17
+ }
18
+
19
+ export { testPayload, testSchema }
@@ -0,0 +1,11 @@
1
+ import { dumpErrors } from '@xyo-network/core'
2
+
3
+ import { testPayload } from '../Test'
4
+ import { XyoPayloadBodyValidator } from './BodyValidator'
5
+
6
+ test('all', () => {
7
+ const validator = new XyoPayloadBodyValidator(testPayload)
8
+ const errors = validator.validate()
9
+ dumpErrors(errors)
10
+ expect(errors.length).toBe(0)
11
+ })
@@ -0,0 +1,28 @@
1
+ import { XyoValidator } from '@xyo-network/core'
2
+
3
+ import { XyoPayload } from '../models'
4
+ import { XyoSchemaNameValidator } from '../SchemaNameValidator'
5
+
6
+ export class XyoPayloadBodyValidator<T extends XyoPayload = XyoPayload> extends XyoValidator<T> {
7
+ private _schemaValidator?: XyoSchemaNameValidator
8
+ get schemaValidator() {
9
+ this._schemaValidator = this._schemaValidator ?? new XyoSchemaNameValidator(this.obj.schema ?? '')
10
+ return this._schemaValidator
11
+ }
12
+
13
+ public schemaName() {
14
+ const errors: Error[] = []
15
+ if (this.obj.schema === undefined) {
16
+ errors.push(Error('schema missing'))
17
+ } else {
18
+ errors.push(...this.schemaValidator.all())
19
+ }
20
+ return errors
21
+ }
22
+
23
+ public validate() {
24
+ const errors: Error[] = []
25
+ errors.push(...this.schemaName())
26
+ return errors
27
+ }
28
+ }
@@ -0,0 +1,11 @@
1
+ import { dumpErrors } from '@xyo-network/core'
2
+
3
+ import { testPayload } from '../Test'
4
+ import { XyoPayloadMetaValidator } from './MetaValidator'
5
+
6
+ test('all', () => {
7
+ const validator = new XyoPayloadMetaValidator(testPayload)
8
+ const errors = validator.validate()
9
+ dumpErrors(errors)
10
+ expect(errors.length).toBe(0)
11
+ })
@@ -0,0 +1,34 @@
1
+ import { XyoHasher, XyoValidator } from '@xyo-network/core'
2
+
3
+ import { XyoPayloadMeta } from '../models'
4
+
5
+ const MIN_ALLOWED_TIMESTAMP = 1609459200000
6
+ const MAX_ALLOWED_TIMESTAMP = 4102444800000
7
+
8
+ class XyoPayloadMetaValidator<T extends XyoPayloadMeta = XyoPayloadMeta> extends XyoValidator<T> {
9
+ public hash() {
10
+ const errors: Error[] = []
11
+ const wrapper = new XyoHasher(this.obj)
12
+
13
+ const bodyHash = wrapper.hash
14
+ if (bodyHash !== this.obj._hash) errors.push(new Error(`Body hash mismatch: [calculated: ${bodyHash}] [found: ${this.obj._hash}]`))
15
+ return errors
16
+ }
17
+
18
+ public timestamp() {
19
+ const errors: Error[] = []
20
+ const { _timestamp } = this.obj
21
+ if (_timestamp === undefined) errors.push(new Error('Missing _timestamp'))
22
+ else if (_timestamp < MIN_ALLOWED_TIMESTAMP) errors.push(new Error('_timestamp is before year 2021'))
23
+ else if (_timestamp > MAX_ALLOWED_TIMESTAMP) errors.push(new Error('_timestamp is after year 2100'))
24
+ return errors
25
+ }
26
+
27
+ public validate() {
28
+ const errors: Error[] = []
29
+ errors.push(...this.hash(), ...this.timestamp())
30
+ return errors
31
+ }
32
+ }
33
+
34
+ export { XyoPayloadMetaValidator }
@@ -0,0 +1,63 @@
1
+ import { dumpErrors } from '@xyo-network/core'
2
+
3
+ import { XyoPayloadWithMeta } from '../models'
4
+ import { XyoPayloadValidator } from './Validator'
5
+
6
+ const testPayloadNoSchema: XyoPayloadWithMeta = {
7
+ _hash: '44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a',
8
+ _timestamp: 1609459255555,
9
+ } as XyoPayloadWithMeta
10
+ const testPayloadMixedCase: XyoPayloadWithMeta = {
11
+ _hash: '9a67116e05c33135f6ba23768f9a3fbbba155297ee1bb0a7e21d91fdc3835769',
12
+ _timestamp: 1609459255555,
13
+ schema: 'network.xyo.testMixedCaseSchema',
14
+ } as XyoPayloadWithMeta
15
+ const testPayloadTooFewLevels: XyoPayloadWithMeta = {
16
+ _hash: '95206b26e3173deaac5e3f5d4510d50112b6348d3a2128b1eb6fe3ca66957628',
17
+ _timestamp: 1609459255555,
18
+ schema: 'network.xyo',
19
+ } as XyoPayloadWithMeta
20
+ const testPayloadDoesNotExist: XyoPayloadWithMeta = {
21
+ _hash: '360b4ce36862ef2a20dd572d69283a86d351b2b4a9cd4f61ae6f7a320be81dbf',
22
+ _timestamp: 1609459255555,
23
+ schema: 'network.dfd-sf-sf-s.blahblah',
24
+ } as XyoPayloadWithMeta
25
+ const testPayloadValid: XyoPayloadWithMeta = {
26
+ _hash: '4b5958c6d16b26d6790e33f5be45578728b0ea36e40a0d1b9c9164822341cac1',
27
+ _timestamp: 1609459255555,
28
+ schema: 'network.xyo.test',
29
+ } as XyoPayloadWithMeta
30
+
31
+ test('all [missing schema]', () => {
32
+ const validator = new XyoPayloadValidator(testPayloadNoSchema)
33
+ const errors = validator.validate()
34
+ expect(errors.length).toBe(1)
35
+ })
36
+
37
+ test('all [mixed case]', () => {
38
+ const validator = new XyoPayloadValidator(testPayloadMixedCase)
39
+ const errors = validator.validate()
40
+ expect(errors.length).toBe(1)
41
+ })
42
+
43
+ test('all [too few levels]', () => {
44
+ const validator = new XyoPayloadValidator(testPayloadTooFewLevels)
45
+ const errors = validator.validate()
46
+ expect(errors.length).toBe(1)
47
+ })
48
+
49
+ test('all [does not exist]', () => {
50
+ const validator = new XyoPayloadValidator(testPayloadDoesNotExist)
51
+ const errors = validator.validate()
52
+ dumpErrors(errors)
53
+ expect(errors.length).toBe(0)
54
+ })
55
+
56
+ test('all [valid]', () => {
57
+ const validator = new XyoPayloadValidator(testPayloadValid)
58
+
59
+ let errors: Error[] = []
60
+ errors = validator.validate()
61
+ dumpErrors(errors)
62
+ expect(errors.length).toBe(0)
63
+ })
@@ -0,0 +1,21 @@
1
+ import { XyoValidator } from '@xyo-network/core'
2
+
3
+ import { XyoPayloadWithMeta } from '../models'
4
+ import { XyoPayloadBodyValidator } from './BodyValidator'
5
+ import { XyoPayloadMetaValidator } from './MetaValidator'
6
+
7
+ export class XyoPayloadValidator<T extends XyoPayloadWithMeta = XyoPayloadWithMeta> extends XyoValidator<T> {
8
+ public body: XyoPayloadBodyValidator
9
+ public meta: XyoPayloadMetaValidator
10
+ constructor(payload: T) {
11
+ super(payload)
12
+ this.body = new XyoPayloadBodyValidator(payload)
13
+ this.meta = new XyoPayloadMetaValidator(payload)
14
+ }
15
+
16
+ public validate() {
17
+ const errors: Error[] = []
18
+ errors.push(...this.body.validate())
19
+ return errors
20
+ }
21
+ }
@@ -0,0 +1,3 @@
1
+ export * from './BodyValidator'
2
+ export * from './MetaValidator'
3
+ export * from './Validator'
@@ -0,0 +1,17 @@
1
+ import { XyoValidator } from '@xyo-network/core'
2
+
3
+ import { XyoPayloadWithMeta } from '../models'
4
+ import { XyoPayloadValidator } from '../Validator'
5
+ import { XyoPayloadWrapper } from './Wrapper'
6
+
7
+ export class XyoPayloadWrapperValidator<T extends XyoPayloadWrapper<XyoPayloadWithMeta> = XyoPayloadWrapper<XyoPayloadWithMeta>> extends XyoValidator<T> {
8
+ public get payload() {
9
+ return new XyoPayloadValidator(this.obj.body)
10
+ }
11
+
12
+ public validate() {
13
+ const errors: Error[] = []
14
+ errors.push(...this.payload.validate())
15
+ return errors
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ import { deepOmitUnderscoreFields, deepPickUnderscoreFields, XyoDataLike, XyoHasher } from '@xyo-network/core'
2
+
3
+ import { Huri } from '../Huri'
4
+ import { XyoPayload } from '../models'
5
+
6
+ export class XyoPayloadWrapper<T extends XyoPayload> extends XyoHasher<T> {
7
+ public get payload() {
8
+ return this.obj
9
+ }
10
+
11
+ public get body() {
12
+ return deepOmitUnderscoreFields<T>(this.obj)
13
+ }
14
+
15
+ public get meta() {
16
+ return deepPickUnderscoreFields<T>(this.obj)
17
+ }
18
+
19
+ public static async load(address: XyoDataLike | Huri) {
20
+ const payload = await new Huri(address).fetch()
21
+ if (payload) {
22
+ return new XyoPayloadWrapper(payload)
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,2 @@
1
+ export * from './Validator'
2
+ export * from './Wrapper'
package/src/index.ts ADDED
@@ -0,0 +1,9 @@
1
+ export * from './Builder'
2
+ export * from './Huri'
3
+ export * from './isXyoPayloadOfSchemaType'
4
+ export * from './models'
5
+ export * from './Query'
6
+ export * from './Schema'
7
+ export * from './SchemaNameValidator'
8
+ export * from './Validator'
9
+ export * from './Wrapper'
@@ -0,0 +1,8 @@
1
+ import { XyoPayload } from './models'
2
+ import { XyoSchemaPayload } from './Schema'
3
+
4
+ export const isXyoPayloadOfSchemaType = <T extends XyoPayload>(schema: string) => {
5
+ return (x: XyoPayload): x is T => x.schema === schema
6
+ }
7
+
8
+ export const isXyoSchemaPayload = isXyoPayloadOfSchemaType<XyoSchemaPayload>('network.xyo.schema')
@@ -0,0 +1,6 @@
1
+ export interface XyoPayloadBase {
2
+ schema: string
3
+ previousHash?: string
4
+ sources?: string[]
5
+ timestamp?: number
6
+ }
@@ -0,0 +1,28 @@
1
+ import { XyoPayloadBase } from './Base'
2
+ import { XyoPayload } from './XyoPayload'
3
+
4
+ export interface XyoPayloadMetaBase {
5
+ _hash: string
6
+ _observeDuration?: number
7
+ _archive: string
8
+ _client?: string
9
+ _reportedHash?: string
10
+ _timestamp: number
11
+ _sources?: XyoPayload[]
12
+ _user_agent?: string
13
+ _schemaValid?: boolean
14
+ }
15
+
16
+ export interface XyoQueryPayloadMetaBase extends XyoPayloadMetaBase {
17
+ _queryId: string
18
+ }
19
+
20
+ export type XyoPayloadMeta<T = unknown> = T & XyoPayloadMetaBase
21
+ export type XyoPartialPayloadMeta<T = unknown> = T & Partial<XyoPayloadMetaBase>
22
+ export type XyoPayloadWithMeta<T = unknown> = T & XyoPayloadMetaBase & XyoPayloadBase
23
+ export type XyoPayloadWithPartialMeta<T = unknown> = T & Partial<XyoPayloadMetaBase> & XyoPayloadBase
24
+
25
+ export type XyoQueryPayloadMeta<T = unknown> = T & XyoQueryPayloadMetaBase
26
+ export type XyoQueryPartialPayloadMeta<T = unknown> = T & Partial<XyoQueryPayloadMetaBase>
27
+ export type XyoQueryPayloadWithMeta<T = unknown> = T & XyoQueryPayloadMetaBase & XyoPayloadBase
28
+ export type XyoQueryPayloadWithPartialMeta<T = unknown> = T & Partial<XyoQueryPayloadMetaBase> & XyoPayloadBase
@@ -0,0 +1,3 @@
1
+ import { XyoPayloadBase } from './Base'
2
+
3
+ export type XyoPayload<T extends object = object> = T & XyoPayloadBase
@@ -0,0 +1,3 @@
1
+ export * from './Base'
2
+ export * from './Meta'
3
+ export * from './XyoPayload'