@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 @@
1
+ {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../src/Wrapper/Wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAe,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE9G,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAG9B,MAAM,OAAO,iBAAwC,SAAQ,SAAY;IACvE,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,IAAW,IAAI;QACb,OAAO,wBAAwB,CAAI,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9C,CAAC;IAED,IAAW,IAAI;QACb,OAAO,wBAAwB,CAAI,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9C,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAA2B;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;QAC/C,IAAI,OAAO,EAAE;YACX,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;SACtC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from './Validator';
2
+ export * from './Wrapper';
@@ -0,0 +1,3 @@
1
+ export * from './Validator';
2
+ export * from './Wrapper';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Wrapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -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,10 @@
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';
10
+ //# 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,QAAQ,CAAA;AACtB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,uBAAuB,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { XyoPayload } from './models';
2
+ import { XyoSchemaPayload } from './Schema';
3
+ export declare const isXyoPayloadOfSchemaType: <T extends XyoPayload<object>>(schema: string) => (x: XyoPayload) => x is T;
4
+ export declare const isXyoSchemaPayload: (x: XyoPayload) => x is XyoSchemaPayload;
@@ -0,0 +1,5 @@
1
+ export const isXyoPayloadOfSchemaType = (schema) => {
2
+ return (x) => x.schema === schema;
3
+ };
4
+ export const isXyoSchemaPayload = isXyoPayloadOfSchemaType('network.xyo.schema');
5
+ //# sourceMappingURL=isXyoPayloadOfSchemaType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isXyoPayloadOfSchemaType.js","sourceRoot":"","sources":["../../src/isXyoPayloadOfSchemaType.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAuB,MAAc,EAAE,EAAE;IAC/E,OAAO,CAAC,CAAa,EAAU,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAmB,oBAAoB,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export interface XyoPayloadBase {
2
+ schema: string;
3
+ previousHash?: string;
4
+ sources?: string[];
5
+ timestamp?: number;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../src/models/Base.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { XyoPayloadBase } from './Base';
2
+ import { XyoPayload } from './XyoPayload';
3
+ export interface XyoPayloadMetaBase {
4
+ _hash: string;
5
+ _observeDuration?: number;
6
+ _archive: string;
7
+ _client?: string;
8
+ _reportedHash?: string;
9
+ _timestamp: number;
10
+ _sources?: XyoPayload[];
11
+ _user_agent?: string;
12
+ _schemaValid?: boolean;
13
+ }
14
+ export interface XyoQueryPayloadMetaBase extends XyoPayloadMetaBase {
15
+ _queryId: string;
16
+ }
17
+ export declare type XyoPayloadMeta<T = unknown> = T & XyoPayloadMetaBase;
18
+ export declare type XyoPartialPayloadMeta<T = unknown> = T & Partial<XyoPayloadMetaBase>;
19
+ export declare type XyoPayloadWithMeta<T = unknown> = T & XyoPayloadMetaBase & XyoPayloadBase;
20
+ export declare type XyoPayloadWithPartialMeta<T = unknown> = T & Partial<XyoPayloadMetaBase> & XyoPayloadBase;
21
+ export declare type XyoQueryPayloadMeta<T = unknown> = T & XyoQueryPayloadMetaBase;
22
+ export declare type XyoQueryPartialPayloadMeta<T = unknown> = T & Partial<XyoQueryPayloadMetaBase>;
23
+ export declare type XyoQueryPayloadWithMeta<T = unknown> = T & XyoQueryPayloadMetaBase & XyoPayloadBase;
24
+ export declare type XyoQueryPayloadWithPartialMeta<T = unknown> = T & Partial<XyoQueryPayloadMetaBase> & XyoPayloadBase;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Meta.js","sourceRoot":"","sources":["../../../src/models/Meta.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { XyoPayloadBase } from './Base';
2
+ export declare type XyoPayload<T extends object = object> = T & XyoPayloadBase;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=XyoPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XyoPayload.js","sourceRoot":"","sources":["../../../src/models/XyoPayload.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './Base';
2
+ export * from './Meta';
3
+ export * from './XyoPayload';
@@ -0,0 +1,4 @@
1
+ export * from './Base';
2
+ export * from './Meta';
3
+ export * from './XyoPayload';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA"}
@@ -0,0 +1,25 @@
1
+ const generateJestConfig = ({ esModules }) => {
2
+ const esModuleslist = Array.isArray(esModules) ? esModules.join('|') : esModules
3
+ return {
4
+ globals: {
5
+ 'ts-jest': {
6
+ tsconfig: 'tsconfig.test.json',
7
+ },
8
+ },
9
+ moduleNameMapper: {
10
+ '^(\\.{1,2}/.*)\\.js$': '$1',
11
+ },
12
+ preset: 'ts-jest/presets/default-esm',
13
+ setupFiles: ['dotenv/config'],
14
+ setupFilesAfterEnv: ['jest-sorted'],
15
+ testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
16
+ testTimeout: 20000,
17
+ transform: {
18
+ [`(${esModuleslist}).+\\.js$`]: 'babel-jest',
19
+ '^.+\\.tsx?$': 'ts-jest/legacy',
20
+ },
21
+ transformIgnorePatterns: [`./node_modules/(?!${esModuleslist})`],
22
+ }
23
+ }
24
+
25
+ module.exports = generateJestConfig({ esModules: ['is-ip', 'ip-regex', 'lodash-es', 'uuid'] })
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@xyo-network/payload",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
+ },
12
+ "dependencies": {
13
+ "@xylabs/sdk-js": "^2.5.9",
14
+ "@xyo-network/account": "^2.21.11",
15
+ "@xyo-network/core": "^2.21.11",
16
+ "axios": "^0.27.2"
17
+ },
18
+ "description": "Primary SDK for using XYO Protocol 2.0",
19
+ "devDependencies": {
20
+ "tslib": "^2.4.0"
21
+ },
22
+ "browser": "dist/esm/index.js",
23
+ "docs": "dist/docs.json",
24
+ "exports": {
25
+ ".": {
26
+ "node": {
27
+ "import": "./dist/esm/index.js",
28
+ "require": "./dist/cjs/index.js"
29
+ },
30
+ "browser": {
31
+ "import": "./dist/esm/index.js",
32
+ "require": "./dist/cjs/index.js"
33
+ },
34
+ "default": "./dist/esm/index.js"
35
+ },
36
+ "./dist/docs.json": {
37
+ "default": "./dist/docs.json"
38
+ },
39
+ "./package.json": "./package.json"
40
+ },
41
+ "main": "dist/cjs/index.js",
42
+ "module": "dist/esm/index.js",
43
+ "homepage": "https://xyo.network",
44
+ "license": "LGPL-3.0-only",
45
+ "publishConfig": {
46
+ "access": "public"
47
+ },
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
51
+ },
52
+ "sideEffects": true,
53
+ "types": "dist/esm/index.d.ts",
54
+ "version": "2.21.11",
55
+ "packageManager": "yarn@3.1.1"
56
+ }
@@ -0,0 +1,37 @@
1
+ import { XyoPayloadBuilder } from './Builder'
2
+
3
+ const schema = 'network.xyo.temp'
4
+
5
+ const payloadHash = '57b78b1b7df3ac0369654642e879cdf2f3c95f9c5949bcb34ea3cb8309c538b4'
6
+
7
+ const ADDITIONAL_FIELD_COUNT = 4
8
+
9
+ describe('XyoBoundWitnessBuilder', () => {
10
+ test('build', () => {
11
+ let builder = new XyoPayloadBuilder({ schema })
12
+ expect(builder).toBeDefined()
13
+ builder = builder.fields({
14
+ testArray: [1, 2, 3],
15
+ testBoolean: true,
16
+ testNull: null,
17
+ testNullObject: { t: null, x: undefined },
18
+ testNumber: 5,
19
+ testObject: { t: 1 },
20
+ testSomeNullObject: { s: 1, t: null, x: undefined },
21
+ testString: 'hi',
22
+ testUndefined: undefined,
23
+ })
24
+ expect(builder).toBeDefined()
25
+
26
+ const actual = builder.build()
27
+
28
+ expect(actual).toBeDefined()
29
+ expect(actual._timestamp).toBeDefined()
30
+ expect(actual._client).toBeDefined()
31
+ expect(actual._hash).toBeDefined()
32
+ expect(actual.schema).toBeDefined()
33
+ expect(Object.keys(actual).length).toBe(8 + ADDITIONAL_FIELD_COUNT)
34
+ expect(Object.keys(actual.testSomeNullObject as object).length).toBe(2)
35
+ expect(actual._hash).toEqual(payloadHash)
36
+ })
37
+ })
@@ -0,0 +1,43 @@
1
+ import { deepOmitUnderscoreFields, removeEmptyFields, StringKeyObject, XyoHasher } from '@xyo-network/core'
2
+
3
+ import { XyoPayload } from '../models'
4
+
5
+ export interface XyoPayloadBuilderOptions {
6
+ schema: string
7
+ }
8
+
9
+ export class XyoPayloadBuilder<T extends XyoPayload = XyoPayload<StringKeyObject>> {
10
+ private _fields: Partial<T> = {}
11
+ private _previousHash?: string
12
+ private _schema: string
13
+
14
+ constructor({ schema }: XyoPayloadBuilderOptions) {
15
+ this._schema = schema
16
+ }
17
+
18
+ public fields(fields?: Partial<T>) {
19
+ if (fields) {
20
+ this._fields = { ...this._fields, ...removeEmptyFields(fields) }
21
+ }
22
+ return this
23
+ }
24
+
25
+ public previousHash(hash?: string) {
26
+ this._previousHash = hash
27
+ return this
28
+ }
29
+
30
+ public hashableFields() {
31
+ return {
32
+ ...removeEmptyFields(deepOmitUnderscoreFields({ ...this._fields, previousHash: this._previousHash })),
33
+ schema: this._schema,
34
+ } as T
35
+ }
36
+
37
+ public build(): T {
38
+ const hashableFields = this.hashableFields()
39
+ const _hash = new XyoHasher(hashableFields).hash
40
+ const _timestamp = Date.now()
41
+ return { ...hashableFields, _client: 'js', _hash, _timestamp, schema: this._schema }
42
+ }
43
+ }
@@ -0,0 +1 @@
1
+ export * from './Builder'
@@ -0,0 +1,92 @@
1
+ import { delay } from '@xylabs/sdk-js'
2
+
3
+ import { XyoPayload } from '../models'
4
+ import { Huri } from './Huri'
5
+
6
+ const hash = 'fb3606d71dcdd49a0aacc9d234e412684d577803c8a9ed9399a9d3776cc88e24'
7
+
8
+ const valid = [
9
+ `https://${hash}`,
10
+ `https://api.archivist.xyo.network/temp/${hash}`,
11
+ `https://api.archivist.xyo.network/${hash}`,
12
+ `http://api.archivist.xyo.network/${hash}`,
13
+ `/api.archivist.xyo.network/${hash}`,
14
+ `//${hash}`,
15
+ `/${hash}`,
16
+ `${hash}`,
17
+ ]
18
+
19
+ const validWithTempArchive = [
20
+ `https://api.archivist.xyo.network/temp/${hash}`,
21
+ `https://api.archivist.xyo.network/temp/${hash}`,
22
+ `http://api.archivist.xyo.network/temp/${hash}`,
23
+ `/api.archivist.xyo.network/temp/${hash}`,
24
+ ]
25
+
26
+ const invalid = [`https:///api.archivist.xyo.network/${hash}`, `https://api.archivist.xyo.network//${hash}`]
27
+
28
+ describe('Huri', () => {
29
+ describe('Valid Items', () => {
30
+ valid.map((item) => {
31
+ test(`valid [${item}]`, () => {
32
+ try {
33
+ const huri = new Huri(item)
34
+ expect(huri.hash).toBe(hash)
35
+ } catch (ex) {
36
+ console.error(`Valid Huri failed: [${item}]`)
37
+ console.error(ex)
38
+ }
39
+ })
40
+ })
41
+ })
42
+ describe('Valid Items w/archive', () => {
43
+ validWithTempArchive.map((item) => {
44
+ test(`valid w/archive [${item}]`, () => {
45
+ try {
46
+ const huri = new Huri(item)
47
+ expect(huri.hash).toBe(hash)
48
+ expect(huri.archive).toBe('temp')
49
+ } catch (ex) {
50
+ console.error(`Valid Huri w/archive failed: [${item}]`)
51
+ console.error(ex)
52
+ }
53
+ })
54
+ })
55
+ })
56
+ describe('Invalid Items', () => {
57
+ invalid.map((item) => {
58
+ test(`invalid [${item}]`, () => {
59
+ expect(() => new Huri(item)).toThrowError()
60
+ })
61
+ })
62
+ })
63
+ describe('Api Fetch', () => {
64
+ it('Valid Huri', async () => {
65
+ const huri = new Huri('https://beta.api.archivist.xyo.network/18f97b3e85f5bede65e7c0a85d74aee896de58ead8bc4b1b3d7300646c653057')
66
+ const result = await huri.fetch()
67
+ expect(result?.schema).toBe('network.xyo.schema')
68
+ })
69
+ it('Invalid Huri', async () => {
70
+ const huri = new Huri('https://beta.api.archivist.xyo.network/18f97b3e85f5bede65e7c0a85d74aee896de58ead8bc4b1b3d7300646c653bad')
71
+ await expect(huri.fetch()).rejects.toThrow()
72
+ })
73
+ })
74
+ describe('Fetch Override', () => {
75
+ invalid.map((item) => {
76
+ test(`invalid [${item}]`, async () => {
77
+ const oldFetch = Huri.fetch
78
+ Huri.fetch = async (huri: Huri) => {
79
+ await delay(0)
80
+ const payload: XyoPayload = {
81
+ schema: huri.hash,
82
+ }
83
+ return payload
84
+ }
85
+ const huri = new Huri('https://beta.api.archivist.xyo.network/18f97b3e85f5bede65e7c0a85d74aee896de58ead8bc4b1b3d7300646c653057')
86
+ const result = await huri.fetch()
87
+ Huri.fetch = oldFetch
88
+ expect(result?.schema).toBe('18f97b3e85f5bede65e7c0a85d74aee896de58ead8bc4b1b3d7300646c653057')
89
+ })
90
+ })
91
+ })
92
+ })
@@ -0,0 +1,155 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import { XyoAddressValue } from '@xyo-network/account'
3
+ import { XyoDataLike } from '@xyo-network/core'
4
+ import axios from 'axios'
5
+
6
+ import { XyoPayload } from '../models'
7
+
8
+ export type XyoObjectCategory = 'block' | 'payload'
9
+
10
+ export type HuriFetchFunction = (huri: Huri) => Promise<XyoPayload | undefined>
11
+
12
+ /*
13
+ Valid Huri:
14
+
15
+ [<protocol>://][<archivist>/[<archive>/]]<hash>
16
+
17
+ defaults:
18
+ protocol: https
19
+ archivist: api.archivist.xyo.network
20
+ */
21
+
22
+ export interface HuriOptions {
23
+ archivistUri?: string
24
+ }
25
+
26
+ export interface XyoFetchedPayload<T extends XyoPayload = XyoPayload> {
27
+ payload: T
28
+ huri?: Huri
29
+ }
30
+
31
+ export class Huri {
32
+ public originalHref: string
33
+ public protocol?: string
34
+ public archivist?: string
35
+ public archive?: string
36
+ public hash: string
37
+
38
+ private isHuri = true
39
+
40
+ constructor(huri: XyoDataLike | Huri, { archivistUri }: HuriOptions = {}) {
41
+ const huriString = Huri.isHuri(huri)?.href ?? typeof huri === 'string' ? (huri as string) : new XyoAddressValue(huri as XyoDataLike).hex
42
+ this.originalHref = huriString
43
+
44
+ const protocol = Huri.parseProtocol(huriString)
45
+ this.protocol = protocol ?? 'https'
46
+
47
+ const path = assertEx(Huri.parsePath(huriString), 'Missing path')
48
+ this.hash = this.parsePath(path, protocol !== undefined)
49
+
50
+ //if archivistUri sent, overwrite protocol and archivist
51
+ if (archivistUri) {
52
+ const archivistUriParts = archivistUri.split('://')
53
+ this.protocol = archivistUriParts[0]
54
+ this.archivist = archivistUriParts[1]
55
+ }
56
+
57
+ this.validateParse()
58
+ }
59
+
60
+ private parsePath(path: string, hasProtocol: boolean) {
61
+ const pathParts = path.split('/')
62
+
63
+ //if the protocal was found, then there is not allowed to be a leading /
64
+ assertEx(!(hasProtocol && pathParts[0].length === 0), 'Invalid protocol seperator')
65
+
66
+ //remove leading '/' if needed
67
+ pathParts[0].length === 0 ? pathParts.shift() : null
68
+
69
+ //hash is assumed to be the last part
70
+ const hash = assertEx(pathParts.pop(), 'No hash specified')
71
+
72
+ //archivist is assumed to be the first part
73
+ this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'
74
+
75
+ //the archive is whatever is left
76
+ this.archive = pathParts.pop()
77
+
78
+ //after we pull off all the path parts, there should be nothing left
79
+ assertEx(pathParts.length === 0, 'Too many path parts')
80
+
81
+ return hash
82
+ }
83
+
84
+ private validateParse() {
85
+ //the archivist should not be zero length
86
+ assertEx(this.archivist?.length !== 0, 'Invalid archivist length')
87
+
88
+ //the archivist should not be zero length (can be undefined)
89
+ assertEx(this.archive?.length !== 0, 'Invalid archive length')
90
+
91
+ //the archive should not be set if the archivist is not set
92
+ assertEx(!(this.archive && !this.archivist), 'If specifying archive, archivist is also required')
93
+ }
94
+
95
+ /*
96
+ The full href or the hash
97
+ */
98
+
99
+ public get href() {
100
+ const parts: string[] = []
101
+ if (this.protocol) {
102
+ parts.push(`${this.protocol}:/`)
103
+ }
104
+ if (this.archive) {
105
+ parts.push(`${this.archive}`)
106
+ }
107
+ if (this.archivist) {
108
+ parts.push(`${this.archivist}`)
109
+ }
110
+ parts.push(this.hash)
111
+ return parts.join('/')
112
+ }
113
+
114
+ public toString() {
115
+ return this.href
116
+ }
117
+
118
+ public async fetch() {
119
+ return await Huri.fetch(this)
120
+ }
121
+
122
+ static async fetch(huri: Huri): Promise<XyoPayload | undefined> {
123
+ return (await axios.get<XyoPayload>(huri.href)).data
124
+ }
125
+
126
+ private static parseProtocol(huri: string) {
127
+ const protocolSplit = huri.split('//')
128
+ assertEx(protocolSplit.length <= 2, `Invalid second protocol [${protocolSplit[2]}]`)
129
+ const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined
130
+ if (rawProtocol) {
131
+ const protocolParts = rawProtocol?.split(':')
132
+ assertEx(protocolParts.length === 2, `Invalid protocol format [${rawProtocol}]`)
133
+ assertEx(protocolParts[1].length === 0, `Invalid protocol format (post :) [${rawProtocol}]`)
134
+ return protocolParts.shift()
135
+ }
136
+ }
137
+
138
+ private static parsePath(huri: string) {
139
+ const protocolSplit = huri.split('//')
140
+ assertEx(protocolSplit.length <= 2, `Invalid format [${huri}]`)
141
+ if (protocolSplit.length === 1) {
142
+ return huri
143
+ }
144
+ if (protocolSplit.length === 2) {
145
+ return protocolSplit[1]
146
+ }
147
+ }
148
+
149
+ public static isHuri(value: unknown) {
150
+ if (typeof value === 'object') {
151
+ return (value as Huri).isHuri ? (value as Huri) : undefined
152
+ }
153
+ return undefined
154
+ }
155
+ }
@@ -0,0 +1 @@
1
+ export * from './Huri'
@@ -0,0 +1,15 @@
1
+ import { XyoPayload } from '../models'
2
+
3
+ export interface XyoQueryPayload extends XyoPayload {
4
+ /** @field The preferred schema to use for the answer */
5
+ targetSchema?: string
6
+
7
+ /** @field The maximum XYO that can be spent executing the query */
8
+ budget?: number
9
+
10
+ /** @field The frequency on which this query can be rerun */
11
+ maxFrequency?: 'once' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year'
12
+
13
+ /** @field The starting point for the bidding on the query */
14
+ minBid?: number
15
+ }
@@ -0,0 +1 @@
1
+ export * from './QueryPayload'
@@ -0,0 +1,11 @@
1
+ import { XyoPayload } from '../models'
2
+
3
+ export type XyoSchemaPayload = XyoPayload<{
4
+ /** @deprecated use definition.$id instead */
5
+ name?: string
6
+ definition: {
7
+ $id?: string
8
+ [key: string]: unknown
9
+ }
10
+ extends?: string
11
+ }>
@@ -0,0 +1 @@
1
+ export * from './Payload'