@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,29 @@
|
|
|
1
|
+
import { XyoDataLike } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayload } from '../models';
|
|
3
|
+
export declare type XyoObjectCategory = 'block' | 'payload';
|
|
4
|
+
export declare type HuriFetchFunction = (huri: Huri) => Promise<XyoPayload | undefined>;
|
|
5
|
+
export interface HuriOptions {
|
|
6
|
+
archivistUri?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface XyoFetchedPayload<T extends XyoPayload = XyoPayload> {
|
|
9
|
+
payload: T;
|
|
10
|
+
huri?: Huri;
|
|
11
|
+
}
|
|
12
|
+
export declare class Huri {
|
|
13
|
+
originalHref: string;
|
|
14
|
+
protocol?: string;
|
|
15
|
+
archivist?: string;
|
|
16
|
+
archive?: string;
|
|
17
|
+
hash: string;
|
|
18
|
+
private isHuri;
|
|
19
|
+
constructor(huri: XyoDataLike | Huri, { archivistUri }?: HuriOptions);
|
|
20
|
+
private parsePath;
|
|
21
|
+
private validateParse;
|
|
22
|
+
get href(): string;
|
|
23
|
+
toString(): string;
|
|
24
|
+
fetch(): Promise<XyoPayload<object> | undefined>;
|
|
25
|
+
static fetch(huri: Huri): Promise<XyoPayload | undefined>;
|
|
26
|
+
private static parseProtocol;
|
|
27
|
+
private static parsePath;
|
|
28
|
+
static isHuri(value: unknown): Huri | undefined;
|
|
29
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/sdk-js';
|
|
2
|
+
import { XyoAddressValue } from '@xyo-network/account';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
export class Huri {
|
|
5
|
+
constructor(huri, { archivistUri } = {}) {
|
|
6
|
+
this.isHuri = true;
|
|
7
|
+
const huriString = (Huri.isHuri(huri)?.href ?? typeof huri === 'string') ? huri : new XyoAddressValue(huri).hex;
|
|
8
|
+
this.originalHref = huriString;
|
|
9
|
+
const protocol = Huri.parseProtocol(huriString);
|
|
10
|
+
this.protocol = protocol ?? 'https';
|
|
11
|
+
const path = assertEx(Huri.parsePath(huriString), 'Missing path');
|
|
12
|
+
this.hash = this.parsePath(path, protocol !== undefined);
|
|
13
|
+
//if archivistUri sent, overwrite protocol and archivist
|
|
14
|
+
if (archivistUri) {
|
|
15
|
+
const archivistUriParts = archivistUri.split('://');
|
|
16
|
+
this.protocol = archivistUriParts[0];
|
|
17
|
+
this.archivist = archivistUriParts[1];
|
|
18
|
+
}
|
|
19
|
+
this.validateParse();
|
|
20
|
+
}
|
|
21
|
+
parsePath(path, hasProtocol) {
|
|
22
|
+
const pathParts = path.split('/');
|
|
23
|
+
//if the protocal was found, then there is not allowed to be a leading /
|
|
24
|
+
assertEx(!(hasProtocol && pathParts[0].length === 0), 'Invalid protocol seperator');
|
|
25
|
+
//remove leading '/' if needed
|
|
26
|
+
pathParts[0].length === 0 ? pathParts.shift() : null;
|
|
27
|
+
//hash is assumed to be the last part
|
|
28
|
+
const hash = assertEx(pathParts.pop(), 'No hash specified');
|
|
29
|
+
//archivist is assumed to be the first part
|
|
30
|
+
this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network';
|
|
31
|
+
//the archive is whatever is left
|
|
32
|
+
this.archive = pathParts.pop();
|
|
33
|
+
//after we pull off all the path parts, there should be nothing left
|
|
34
|
+
assertEx(pathParts.length === 0, 'Too many path parts');
|
|
35
|
+
return hash;
|
|
36
|
+
}
|
|
37
|
+
validateParse() {
|
|
38
|
+
//the archivist should not be zero length
|
|
39
|
+
assertEx(this.archivist?.length !== 0, 'Invalid archivist length');
|
|
40
|
+
//the archivist should not be zero length (can be undefined)
|
|
41
|
+
assertEx(this.archive?.length !== 0, 'Invalid archive length');
|
|
42
|
+
//the archive should not be set if the archivist is not set
|
|
43
|
+
assertEx(!(this.archive && !this.archivist), 'If specifying archive, archivist is also required');
|
|
44
|
+
}
|
|
45
|
+
/*
|
|
46
|
+
The full href or the hash
|
|
47
|
+
*/
|
|
48
|
+
get href() {
|
|
49
|
+
const parts = [];
|
|
50
|
+
if (this.protocol) {
|
|
51
|
+
parts.push(`${this.protocol}:/`);
|
|
52
|
+
}
|
|
53
|
+
if (this.archive) {
|
|
54
|
+
parts.push(`${this.archive}`);
|
|
55
|
+
}
|
|
56
|
+
if (this.archivist) {
|
|
57
|
+
parts.push(`${this.archivist}`);
|
|
58
|
+
}
|
|
59
|
+
parts.push(this.hash);
|
|
60
|
+
return parts.join('/');
|
|
61
|
+
}
|
|
62
|
+
toString() {
|
|
63
|
+
return this.href;
|
|
64
|
+
}
|
|
65
|
+
async fetch() {
|
|
66
|
+
return await Huri.fetch(this);
|
|
67
|
+
}
|
|
68
|
+
static async fetch(huri) {
|
|
69
|
+
return (await axios.get(huri.href)).data;
|
|
70
|
+
}
|
|
71
|
+
static parseProtocol(huri) {
|
|
72
|
+
const protocolSplit = huri.split('//');
|
|
73
|
+
assertEx(protocolSplit.length <= 2, `Invalid second protocol [${protocolSplit[2]}]`);
|
|
74
|
+
const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined;
|
|
75
|
+
if (rawProtocol) {
|
|
76
|
+
const protocolParts = rawProtocol?.split(':');
|
|
77
|
+
assertEx(protocolParts.length === 2, `Invalid protocol format [${rawProtocol}]`);
|
|
78
|
+
assertEx(protocolParts[1].length === 0, `Invalid protocol format (post :) [${rawProtocol}]`);
|
|
79
|
+
return protocolParts.shift();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
static parsePath(huri) {
|
|
83
|
+
const protocolSplit = huri.split('//');
|
|
84
|
+
assertEx(protocolSplit.length <= 2, `Invalid format [${huri}]`);
|
|
85
|
+
if (protocolSplit.length === 1) {
|
|
86
|
+
return huri;
|
|
87
|
+
}
|
|
88
|
+
if (protocolSplit.length === 2) {
|
|
89
|
+
return protocolSplit[1];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
static isHuri(value) {
|
|
93
|
+
if (typeof value === 'object') {
|
|
94
|
+
return value.isHuri ? value : undefined;
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=Huri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Huri.js","sourceRoot":"","sources":["../../../src/Huri/Huri.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Huri';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Huri/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { XyoPayload } from '../models';
|
|
2
|
+
export interface XyoQueryPayload extends XyoPayload {
|
|
3
|
+
/** @field The preferred schema to use for the answer */
|
|
4
|
+
targetSchema?: string;
|
|
5
|
+
/** @field The maximum XYO that can be spent executing the query */
|
|
6
|
+
budget?: number;
|
|
7
|
+
/** @field The frequency on which this query can be rerun */
|
|
8
|
+
maxFrequency?: 'once' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
|
|
9
|
+
/** @field The starting point for the bidding on the query */
|
|
10
|
+
minBid?: number;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryPayload.js","sourceRoot":"","sources":["../../../src/Query/QueryPayload.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './QueryPayload';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Query/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Payload.js","sourceRoot":"","sources":["../../../src/Schema/Payload.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Payload';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates a XYO schema structure and existence
|
|
3
|
+
*/
|
|
4
|
+
export declare class XyoSchemaNameValidator {
|
|
5
|
+
schema?: string;
|
|
6
|
+
constructor(schema?: string);
|
|
7
|
+
private _parts?;
|
|
8
|
+
/**
|
|
9
|
+
* The schema converted into a string array split on '.'
|
|
10
|
+
*
|
|
11
|
+
* @returns string[]
|
|
12
|
+
*/
|
|
13
|
+
get parts(): string[] | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Levels in the schema
|
|
16
|
+
*
|
|
17
|
+
* @returns number
|
|
18
|
+
*/
|
|
19
|
+
get levels(): number | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Checks whether the schema is all lowercase
|
|
22
|
+
*
|
|
23
|
+
* @returns boolean
|
|
24
|
+
*/
|
|
25
|
+
get isLowercase(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* Get a domain for the schema at a certain level
|
|
29
|
+
*
|
|
30
|
+
* @param level - Zero based level to check
|
|
31
|
+
* @returns string
|
|
32
|
+
*/
|
|
33
|
+
private domainLevel;
|
|
34
|
+
private _rootDomain?;
|
|
35
|
+
/**
|
|
36
|
+
* The rootDomain is the first two levels of the schema, in reverse order
|
|
37
|
+
* This can be used to determine who 'owns' that schema, based on domain
|
|
38
|
+
* registration
|
|
39
|
+
*
|
|
40
|
+
* @returns string
|
|
41
|
+
*/
|
|
42
|
+
get rootDomain(): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Checks if the root domain validates via DNS resolution
|
|
45
|
+
*
|
|
46
|
+
* @returns boolean
|
|
47
|
+
*/
|
|
48
|
+
rootDomainExists(): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Determines how many levels of the schema's reverse domain
|
|
51
|
+
* pass DNS resolution
|
|
52
|
+
*
|
|
53
|
+
* @returns number (0 if none exist)
|
|
54
|
+
*/
|
|
55
|
+
domainExistanceDepth(): Promise<number>;
|
|
56
|
+
/**
|
|
57
|
+
* Run all the validations
|
|
58
|
+
* @param checkExistance - boolean
|
|
59
|
+
* @returns Error[]
|
|
60
|
+
*/
|
|
61
|
+
allDynamic(): Promise<Error[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Run all static validations
|
|
64
|
+
* @returns Error[]
|
|
65
|
+
*/
|
|
66
|
+
all(): Error[];
|
|
67
|
+
}
|
|
68
|
+
/** @deprectated use XyoSchemaNameValidator instead */
|
|
69
|
+
export declare class SchemaValidator extends XyoSchemaNameValidator {
|
|
70
|
+
}
|
|
71
|
+
/** @deprectated use XyoSchemaNameValidator instead */
|
|
72
|
+
export declare class XyoSchemaValidator extends XyoSchemaNameValidator {
|
|
73
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { domainExists } from '@xyo-network/core';
|
|
2
|
+
/**
|
|
3
|
+
* Validates a XYO schema structure and existence
|
|
4
|
+
*/
|
|
5
|
+
export class XyoSchemaNameValidator {
|
|
6
|
+
constructor(schema) {
|
|
7
|
+
this.schema = schema;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The schema converted into a string array split on '.'
|
|
11
|
+
*
|
|
12
|
+
* @returns string[]
|
|
13
|
+
*/
|
|
14
|
+
get parts() {
|
|
15
|
+
this._parts = this._parts ?? this.schema?.split('.');
|
|
16
|
+
return this._parts;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Levels in the schema
|
|
20
|
+
*
|
|
21
|
+
* @returns number
|
|
22
|
+
*/
|
|
23
|
+
get levels() {
|
|
24
|
+
return this.parts?.length;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Checks whether the schema is all lowercase
|
|
28
|
+
*
|
|
29
|
+
* @returns boolean
|
|
30
|
+
*/
|
|
31
|
+
get isLowercase() {
|
|
32
|
+
return this.schema === this.schema?.toLowerCase();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
* Get a domain for the schema at a certain level
|
|
37
|
+
*
|
|
38
|
+
* @param level - Zero based level to check
|
|
39
|
+
* @returns string
|
|
40
|
+
*/
|
|
41
|
+
domainLevel(level) {
|
|
42
|
+
return this.parts
|
|
43
|
+
?.slice(0, level + 1)
|
|
44
|
+
.reverse()
|
|
45
|
+
.join('.');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The rootDomain is the first two levels of the schema, in reverse order
|
|
49
|
+
* This can be used to determine who 'owns' that schema, based on domain
|
|
50
|
+
* registration
|
|
51
|
+
*
|
|
52
|
+
* @returns string
|
|
53
|
+
*/
|
|
54
|
+
get rootDomain() {
|
|
55
|
+
this._rootDomain = this._rootDomain ?? this.domainLevel(1);
|
|
56
|
+
return this._rootDomain;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Checks if the root domain validates via DNS resolution
|
|
60
|
+
*
|
|
61
|
+
* @returns boolean
|
|
62
|
+
*/
|
|
63
|
+
async rootDomainExists() {
|
|
64
|
+
return await domainExists(this.rootDomain);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Determines how many levels of the schema's reverse domain
|
|
68
|
+
* pass DNS resolution
|
|
69
|
+
*
|
|
70
|
+
* @returns number (0 if none exist)
|
|
71
|
+
*/
|
|
72
|
+
async domainExistanceDepth() {
|
|
73
|
+
const levels = this.levels ?? 0;
|
|
74
|
+
let level = 0;
|
|
75
|
+
while (level < levels) {
|
|
76
|
+
if (!(await domainExists(this.domainLevel(level)))) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
level += 1;
|
|
80
|
+
}
|
|
81
|
+
return level;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Run all the validations
|
|
85
|
+
* @param checkExistance - boolean
|
|
86
|
+
* @returns Error[]
|
|
87
|
+
*/
|
|
88
|
+
async allDynamic() {
|
|
89
|
+
const errors = [];
|
|
90
|
+
if ((this.schema?.length ?? 0) === 0)
|
|
91
|
+
errors.push(Error('schema missing'));
|
|
92
|
+
else if (!(await this.rootDomainExists()))
|
|
93
|
+
errors.push(Error(`schema root domain must exist [${this.rootDomain}]`));
|
|
94
|
+
return errors;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Run all static validations
|
|
98
|
+
* @returns Error[]
|
|
99
|
+
*/
|
|
100
|
+
all() {
|
|
101
|
+
const errors = [];
|
|
102
|
+
if ((this.schema?.length ?? 0) === 0)
|
|
103
|
+
errors.push(Error('schema missing'));
|
|
104
|
+
else if ((this.levels ?? 0) < 3)
|
|
105
|
+
errors.push(Error(`schema levels < 3 [${this.levels}, ${this.schema}]`));
|
|
106
|
+
else if (!this.isLowercase)
|
|
107
|
+
errors.push(Error(`schema not lowercase [${this.schema}]`));
|
|
108
|
+
return errors;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** @deprectated use XyoSchemaNameValidator instead */
|
|
112
|
+
export class SchemaValidator extends XyoSchemaNameValidator {
|
|
113
|
+
}
|
|
114
|
+
/** @deprectated use XyoSchemaNameValidator instead */
|
|
115
|
+
export class XyoSchemaValidator extends XyoSchemaNameValidator {
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=SchemaNameValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaNameValidator.js","sourceRoot":"","sources":["../../src/SchemaNameValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './testPayload';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Test/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const testSchema = 'network.xyo.test';
|
|
2
|
+
const testPayload = {
|
|
3
|
+
_archive: 'test',
|
|
4
|
+
_hash: '20e14207f952a09f767ff614a648546c037fe524ace0bfe55db31f818aff1f1c',
|
|
5
|
+
_timestamp: 1609459255555,
|
|
6
|
+
numberField: 1,
|
|
7
|
+
objectField: {
|
|
8
|
+
numberField: 1,
|
|
9
|
+
stringField: 'stringValue',
|
|
10
|
+
},
|
|
11
|
+
schema: testSchema,
|
|
12
|
+
stringField: 'stringValue',
|
|
13
|
+
};
|
|
14
|
+
export { testPayload, testSchema };
|
|
15
|
+
//# sourceMappingURL=testPayload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testPayload.js","sourceRoot":"","sources":["../../../src/Test/testPayload.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAG,kBAAkB,CAAA;AACrC,MAAM,WAAW,GAAuC;IACtD,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,kEAAkE;IACzE,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,CAAC;IACd,WAAW,EAAE;QACX,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,aAAa;KAC3B;IACD,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,aAAa;CAC3B,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayload } from '../models';
|
|
3
|
+
import { XyoSchemaNameValidator } from '../SchemaNameValidator';
|
|
4
|
+
export declare class XyoPayloadBodyValidator<T extends XyoPayload = XyoPayload> extends XyoValidator<T> {
|
|
5
|
+
private _schemaValidator?;
|
|
6
|
+
get schemaValidator(): XyoSchemaNameValidator;
|
|
7
|
+
schemaName(): Error[];
|
|
8
|
+
validate(): Error[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoSchemaNameValidator } from '../SchemaNameValidator';
|
|
3
|
+
export class XyoPayloadBodyValidator extends XyoValidator {
|
|
4
|
+
get schemaValidator() {
|
|
5
|
+
this._schemaValidator = this._schemaValidator ?? new XyoSchemaNameValidator(this.obj.schema ?? '');
|
|
6
|
+
return this._schemaValidator;
|
|
7
|
+
}
|
|
8
|
+
schemaName() {
|
|
9
|
+
const errors = [];
|
|
10
|
+
if (this.obj.schema === undefined) {
|
|
11
|
+
errors.push(Error('schema missing'));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
errors.push(...this.schemaValidator.all());
|
|
15
|
+
}
|
|
16
|
+
return errors;
|
|
17
|
+
}
|
|
18
|
+
validate() {
|
|
19
|
+
const errors = [];
|
|
20
|
+
errors.push(...this.schemaName());
|
|
21
|
+
return errors;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=BodyValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BodyValidator.js","sourceRoot":"","sources":["../../../src/Validator/BodyValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,MAAM,OAAO,uBAA2D,SAAQ,YAAe;IAE7F,IAAI,eAAe;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QAClG,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAEM,UAAU;QACf,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;SACrC;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAA;SAC3C;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QACjC,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayloadMeta } from '../models';
|
|
3
|
+
declare class XyoPayloadMetaValidator<T extends XyoPayloadMeta = XyoPayloadMeta> extends XyoValidator<T> {
|
|
4
|
+
hash(): Error[];
|
|
5
|
+
timestamp(): Error[];
|
|
6
|
+
validate(): Error[];
|
|
7
|
+
}
|
|
8
|
+
export { XyoPayloadMetaValidator };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { XyoHasher, XyoValidator } from '@xyo-network/core';
|
|
2
|
+
const MIN_ALLOWED_TIMESTAMP = 1609459200000;
|
|
3
|
+
const MAX_ALLOWED_TIMESTAMP = 4102444800000;
|
|
4
|
+
class XyoPayloadMetaValidator extends XyoValidator {
|
|
5
|
+
hash() {
|
|
6
|
+
const errors = [];
|
|
7
|
+
const wrapper = new XyoHasher(this.obj);
|
|
8
|
+
const bodyHash = wrapper.hash;
|
|
9
|
+
if (bodyHash !== this.obj._hash)
|
|
10
|
+
errors.push(new Error(`Body hash mismatch: [calculated: ${bodyHash}] [found: ${this.obj._hash}]`));
|
|
11
|
+
return errors;
|
|
12
|
+
}
|
|
13
|
+
timestamp() {
|
|
14
|
+
const errors = [];
|
|
15
|
+
const { _timestamp } = this.obj;
|
|
16
|
+
if (_timestamp === undefined)
|
|
17
|
+
errors.push(new Error('Missing _timestamp'));
|
|
18
|
+
else if (_timestamp < MIN_ALLOWED_TIMESTAMP)
|
|
19
|
+
errors.push(new Error('_timestamp is before year 2021'));
|
|
20
|
+
else if (_timestamp > MAX_ALLOWED_TIMESTAMP)
|
|
21
|
+
errors.push(new Error('_timestamp is after year 2100'));
|
|
22
|
+
return errors;
|
|
23
|
+
}
|
|
24
|
+
validate() {
|
|
25
|
+
const errors = [];
|
|
26
|
+
errors.push(...this.hash(), ...this.timestamp());
|
|
27
|
+
return errors;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export { XyoPayloadMetaValidator };
|
|
31
|
+
//# sourceMappingURL=MetaValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetaValidator.js","sourceRoot":"","sources":["../../../src/Validator/MetaValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAI3D,MAAM,qBAAqB,GAAG,aAAa,CAAA;AAC3C,MAAM,qBAAqB,GAAG,aAAa,CAAA;AAE3C,MAAM,uBAAmE,SAAQ,YAAe;IACvF,IAAI;QACT,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAA;QAC7B,IAAI,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oCAAoC,QAAQ,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACnI,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,SAAS;QACd,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,CAAA;QAC/B,IAAI,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAA;aACrE,IAAI,UAAU,GAAG,qBAAqB;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAA;aAChG,IAAI,UAAU,GAAG,qBAAqB;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAA;QACpG,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAChD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayloadWithMeta } from '../models';
|
|
3
|
+
import { XyoPayloadBodyValidator } from './BodyValidator';
|
|
4
|
+
import { XyoPayloadMetaValidator } from './MetaValidator';
|
|
5
|
+
export declare class XyoPayloadValidator<T extends XyoPayloadWithMeta = XyoPayloadWithMeta> extends XyoValidator<T> {
|
|
6
|
+
body: XyoPayloadBodyValidator;
|
|
7
|
+
meta: XyoPayloadMetaValidator;
|
|
8
|
+
constructor(payload: T);
|
|
9
|
+
validate(): Error[];
|
|
10
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayloadBodyValidator } from './BodyValidator';
|
|
3
|
+
import { XyoPayloadMetaValidator } from './MetaValidator';
|
|
4
|
+
export class XyoPayloadValidator extends XyoValidator {
|
|
5
|
+
constructor(payload) {
|
|
6
|
+
super(payload);
|
|
7
|
+
this.body = new XyoPayloadBodyValidator(payload);
|
|
8
|
+
this.meta = new XyoPayloadMetaValidator(payload);
|
|
9
|
+
}
|
|
10
|
+
validate() {
|
|
11
|
+
const errors = [];
|
|
12
|
+
errors.push(...this.body.validate());
|
|
13
|
+
return errors;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../src/Validator/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,MAAM,OAAO,mBAAuE,SAAQ,YAAe;IAGzG,YAAY,OAAU;QACpB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACpC,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -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,8 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayloadWithMeta } from '../models';
|
|
3
|
+
import { XyoPayloadValidator } from '../Validator';
|
|
4
|
+
import { XyoPayloadWrapper } from './Wrapper';
|
|
5
|
+
export declare class XyoPayloadWrapperValidator<T extends XyoPayloadWrapper<XyoPayloadWithMeta> = XyoPayloadWrapper<XyoPayloadWithMeta>> extends XyoValidator<T> {
|
|
6
|
+
get payload(): XyoPayloadValidator<XyoPayloadWithMeta<unknown>>;
|
|
7
|
+
validate(): Error[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { XyoValidator } from '@xyo-network/core';
|
|
2
|
+
import { XyoPayloadValidator } from '../Validator';
|
|
3
|
+
export class XyoPayloadWrapperValidator extends XyoValidator {
|
|
4
|
+
get payload() {
|
|
5
|
+
return new XyoPayloadValidator(this.obj.body);
|
|
6
|
+
}
|
|
7
|
+
validate() {
|
|
8
|
+
const errors = [];
|
|
9
|
+
errors.push(...this.payload.validate());
|
|
10
|
+
return errors;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../src/Wrapper/Validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGlD,MAAM,OAAO,0BAAoH,SAAQ,YAAe;IACtJ,IAAW,OAAO;QAChB,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvC,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { XyoDataLike, XyoHasher } from '@xyo-network/core';
|
|
2
|
+
import { Huri } from '../Huri';
|
|
3
|
+
import { XyoPayload } from '../models';
|
|
4
|
+
export declare class XyoPayloadWrapper<T extends XyoPayload> extends XyoHasher<T> {
|
|
5
|
+
get payload(): T;
|
|
6
|
+
get body(): T;
|
|
7
|
+
get meta(): T;
|
|
8
|
+
static load(address: XyoDataLike | Huri): Promise<XyoPayloadWrapper<XyoPayload<object>> | undefined>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { deepOmitUnderscoreFields, deepPickUnderscoreFields, XyoHasher } from '@xyo-network/core';
|
|
2
|
+
import { Huri } from '../Huri';
|
|
3
|
+
export class XyoPayloadWrapper extends XyoHasher {
|
|
4
|
+
get payload() {
|
|
5
|
+
return this.obj;
|
|
6
|
+
}
|
|
7
|
+
get body() {
|
|
8
|
+
return deepOmitUnderscoreFields(this.obj);
|
|
9
|
+
}
|
|
10
|
+
get meta() {
|
|
11
|
+
return deepPickUnderscoreFields(this.obj);
|
|
12
|
+
}
|
|
13
|
+
static async load(address) {
|
|
14
|
+
const payload = await new Huri(address).fetch();
|
|
15
|
+
if (payload) {
|
|
16
|
+
return new XyoPayloadWrapper(payload);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Wrapper.js.map
|