@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.
- package/LICENSE +165 -0
- package/README.md +79 -0
- package/babel.config.json +5 -0
- package/dist/cjs/Builder/Builder.d.ts +15 -0
- package/dist/cjs/Builder/Builder.js +31 -0
- package/dist/cjs/Builder/Builder.js.map +1 -0
- package/dist/cjs/Builder/index.d.ts +1 -0
- package/dist/cjs/Builder/index.js +5 -0
- package/dist/cjs/Builder/index.js.map +1 -0
- package/dist/cjs/Huri/Huri.d.ts +29 -0
- package/dist/cjs/Huri/Huri.js +111 -0
- package/dist/cjs/Huri/Huri.js.map +1 -0
- package/dist/cjs/Huri/index.d.ts +1 -0
- package/dist/cjs/Huri/index.js +5 -0
- package/dist/cjs/Huri/index.js.map +1 -0
- package/dist/cjs/Query/QueryPayload.d.ts +11 -0
- package/dist/cjs/Query/QueryPayload.js +3 -0
- package/dist/cjs/Query/QueryPayload.js.map +1 -0
- package/dist/cjs/Query/index.d.ts +1 -0
- package/dist/cjs/Query/index.js +5 -0
- package/dist/cjs/Query/index.js.map +1 -0
- package/dist/cjs/Schema/Payload.d.ts +10 -0
- package/dist/cjs/Schema/Payload.js +3 -0
- package/dist/cjs/Schema/Payload.js.map +1 -0
- package/dist/cjs/Schema/index.d.ts +1 -0
- package/dist/cjs/Schema/index.js +5 -0
- package/dist/cjs/Schema/index.js.map +1 -0
- package/dist/cjs/SchemaNameValidator.d.ts +73 -0
- package/dist/cjs/SchemaNameValidator.js +135 -0
- package/dist/cjs/SchemaNameValidator.js.map +1 -0
- package/dist/cjs/Test/index.d.ts +1 -0
- package/dist/cjs/Test/index.js +5 -0
- package/dist/cjs/Test/index.js.map +1 -0
- package/dist/cjs/Test/testPayload.d.ts +5 -0
- package/dist/cjs/Test/testPayload.js +19 -0
- package/dist/cjs/Test/testPayload.js.map +1 -0
- package/dist/cjs/Validator/BodyValidator.d.ts +9 -0
- package/dist/cjs/Validator/BodyValidator.js +29 -0
- package/dist/cjs/Validator/BodyValidator.js.map +1 -0
- package/dist/cjs/Validator/MetaValidator.d.ts +8 -0
- package/dist/cjs/Validator/MetaValidator.js +34 -0
- package/dist/cjs/Validator/MetaValidator.js.map +1 -0
- package/dist/cjs/Validator/Validator.d.ts +10 -0
- package/dist/cjs/Validator/Validator.js +20 -0
- package/dist/cjs/Validator/Validator.js.map +1 -0
- package/dist/cjs/Validator/index.d.ts +3 -0
- package/dist/cjs/Validator/index.js +7 -0
- package/dist/cjs/Validator/index.js.map +1 -0
- package/dist/cjs/Wrapper/Validator.d.ts +8 -0
- package/dist/cjs/Wrapper/Validator.js +17 -0
- package/dist/cjs/Wrapper/Validator.js.map +1 -0
- package/dist/cjs/Wrapper/Wrapper.d.ts +9 -0
- package/dist/cjs/Wrapper/Wrapper.js +27 -0
- package/dist/cjs/Wrapper/Wrapper.js.map +1 -0
- package/dist/cjs/Wrapper/index.d.ts +2 -0
- package/dist/cjs/Wrapper/index.js +6 -0
- package/dist/cjs/Wrapper/index.js.map +1 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +13 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/isXyoPayloadOfSchemaType.d.ts +4 -0
- package/dist/cjs/isXyoPayloadOfSchemaType.js +9 -0
- package/dist/cjs/isXyoPayloadOfSchemaType.js.map +1 -0
- package/dist/cjs/models/Base.d.ts +6 -0
- package/dist/cjs/models/Base.js +3 -0
- package/dist/cjs/models/Base.js.map +1 -0
- package/dist/cjs/models/Meta.d.ts +24 -0
- package/dist/cjs/models/Meta.js +3 -0
- package/dist/cjs/models/Meta.js.map +1 -0
- package/dist/cjs/models/XyoPayload.d.ts +2 -0
- package/dist/cjs/models/XyoPayload.js +3 -0
- package/dist/cjs/models/XyoPayload.js.map +1 -0
- package/dist/cjs/models/index.d.ts +3 -0
- package/dist/cjs/models/index.js +7 -0
- package/dist/cjs/models/index.js.map +1 -0
- package/dist/docs.json +7 -0
- package/dist/esm/Builder/Builder.d.ts +15 -0
- package/dist/esm/Builder/Builder.js +30 -0
- package/dist/esm/Builder/Builder.js.map +1 -0
- package/dist/esm/Builder/index.d.ts +1 -0
- package/dist/esm/Builder/index.js +2 -0
- package/dist/esm/Builder/index.js.map +1 -0
- package/dist/esm/Huri/Huri.d.ts +29 -0
- package/dist/esm/Huri/Huri.js +99 -0
- package/dist/esm/Huri/Huri.js.map +1 -0
- package/dist/esm/Huri/index.d.ts +1 -0
- package/dist/esm/Huri/index.js +2 -0
- package/dist/esm/Huri/index.js.map +1 -0
- package/dist/esm/Query/QueryPayload.d.ts +11 -0
- package/dist/esm/Query/QueryPayload.js +2 -0
- package/dist/esm/Query/QueryPayload.js.map +1 -0
- package/dist/esm/Query/index.d.ts +1 -0
- package/dist/esm/Query/index.js +2 -0
- package/dist/esm/Query/index.js.map +1 -0
- package/dist/esm/Schema/Payload.d.ts +10 -0
- package/dist/esm/Schema/Payload.js +2 -0
- package/dist/esm/Schema/Payload.js.map +1 -0
- package/dist/esm/Schema/index.d.ts +1 -0
- package/dist/esm/Schema/index.js +2 -0
- package/dist/esm/Schema/index.js.map +1 -0
- package/dist/esm/SchemaNameValidator.d.ts +73 -0
- package/dist/esm/SchemaNameValidator.js +117 -0
- package/dist/esm/SchemaNameValidator.js.map +1 -0
- package/dist/esm/Test/index.d.ts +1 -0
- package/dist/esm/Test/index.js +2 -0
- package/dist/esm/Test/index.js.map +1 -0
- package/dist/esm/Test/testPayload.d.ts +5 -0
- package/dist/esm/Test/testPayload.js +15 -0
- package/dist/esm/Test/testPayload.js.map +1 -0
- package/dist/esm/Validator/BodyValidator.d.ts +9 -0
- package/dist/esm/Validator/BodyValidator.js +24 -0
- package/dist/esm/Validator/BodyValidator.js.map +1 -0
- package/dist/esm/Validator/MetaValidator.d.ts +8 -0
- package/dist/esm/Validator/MetaValidator.js +31 -0
- package/dist/esm/Validator/MetaValidator.js.map +1 -0
- package/dist/esm/Validator/Validator.d.ts +10 -0
- package/dist/esm/Validator/Validator.js +16 -0
- package/dist/esm/Validator/Validator.js.map +1 -0
- package/dist/esm/Validator/index.d.ts +3 -0
- package/dist/esm/Validator/index.js +4 -0
- package/dist/esm/Validator/index.js.map +1 -0
- package/dist/esm/Wrapper/Validator.d.ts +8 -0
- package/dist/esm/Wrapper/Validator.js +13 -0
- package/dist/esm/Wrapper/Validator.js.map +1 -0
- package/dist/esm/Wrapper/Wrapper.d.ts +9 -0
- package/dist/esm/Wrapper/Wrapper.js +20 -0
- package/dist/esm/Wrapper/Wrapper.js.map +1 -0
- package/dist/esm/Wrapper/index.d.ts +2 -0
- package/dist/esm/Wrapper/index.js +3 -0
- package/dist/esm/Wrapper/index.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/isXyoPayloadOfSchemaType.d.ts +4 -0
- package/dist/esm/isXyoPayloadOfSchemaType.js +5 -0
- package/dist/esm/isXyoPayloadOfSchemaType.js.map +1 -0
- package/dist/esm/models/Base.d.ts +6 -0
- package/dist/esm/models/Base.js +2 -0
- package/dist/esm/models/Base.js.map +1 -0
- package/dist/esm/models/Meta.d.ts +24 -0
- package/dist/esm/models/Meta.js +2 -0
- package/dist/esm/models/Meta.js.map +1 -0
- package/dist/esm/models/XyoPayload.d.ts +2 -0
- package/dist/esm/models/XyoPayload.js +2 -0
- package/dist/esm/models/XyoPayload.js.map +1 -0
- package/dist/esm/models/index.d.ts +3 -0
- package/dist/esm/models/index.js +4 -0
- package/dist/esm/models/index.js.map +1 -0
- package/jest.config.cjs +25 -0
- package/package.json +56 -0
- package/src/Builder/Builder.spec.ts +37 -0
- package/src/Builder/Builder.ts +43 -0
- package/src/Builder/index.ts +1 -0
- package/src/Huri/Huri.spec.ts +92 -0
- package/src/Huri/Huri.ts +155 -0
- package/src/Huri/index.ts +1 -0
- package/src/Query/QueryPayload.ts +15 -0
- package/src/Query/index.ts +1 -0
- package/src/Schema/Payload.ts +11 -0
- package/src/Schema/index.ts +1 -0
- package/src/SchemaNameValidator.ts +128 -0
- package/src/Test/index.ts +1 -0
- package/src/Test/testPayload.ts +19 -0
- package/src/Validator/BodyValidator.spec.ts +11 -0
- package/src/Validator/BodyValidator.ts +28 -0
- package/src/Validator/MetaValidator.spec.ts +11 -0
- package/src/Validator/MetaValidator.ts +34 -0
- package/src/Validator/Validator.spec.ts +63 -0
- package/src/Validator/Validator.ts +21 -0
- package/src/Validator/index.ts +3 -0
- package/src/Wrapper/Validator.ts +17 -0
- package/src/Wrapper/Wrapper.ts +25 -0
- package/src/Wrapper/index.ts +2 -0
- package/src/index.ts +9 -0
- package/src/isXyoPayloadOfSchemaType.ts +8 -0
- package/src/models/Base.ts +6 -0
- package/src/models/Meta.ts +28 -0
- package/src/models/XyoPayload.ts +3 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"Meta.js","sourceRoot":"","sources":["../../../src/models/Meta.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XyoPayload.js","sourceRoot":"","sources":["../../../src/models/XyoPayload.ts"],"names":[],"mappings":""}
|
|
@@ -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"}
|
package/jest.config.cjs
ADDED
|
@@ -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
|
+
})
|
package/src/Huri/Huri.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
export * from './Payload'
|