@xyo-network/boundwitness-wrapper 2.42.16

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.
@@ -0,0 +1,33 @@
1
+ import { XyoBoundWitness } from '@xyo-network/boundwitness-model';
2
+ import { DataLike } from '@xyo-network/core';
3
+ import { Huri } from '@xyo-network/huri';
4
+ import { XyoPayload } from '@xyo-network/payload-model';
5
+ import { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper';
6
+ export declare class BoundWitnessWrapper<TBoundWitness extends XyoBoundWitness<{
7
+ schema: string;
8
+ }> = XyoBoundWitness, TPayload extends XyoPayload = XyoPayload> extends PayloadWrapperBase<TBoundWitness> {
9
+ protected _payloads: Record<string, PayloadWrapper<TPayload>> | undefined;
10
+ private isBoundWitnessWrapper;
11
+ constructor(boundwitness: TBoundWitness, payloads?: (TPayload | PayloadWrapper<TPayload> | null)[]);
12
+ get addresses(): string[];
13
+ get boundwitness(): TBoundWitness;
14
+ get errors(): Error[];
15
+ get missingPayloads(): string[];
16
+ get payloadHashes(): string[];
17
+ get payloadSchemas(): string[];
18
+ get payloads(): Record<string, PayloadWrapper<TPayload>>;
19
+ set payloads(payloads: Record<string, PayloadWrapper<TPayload>> | (TPayload | PayloadWrapper<TPayload>)[] | undefined);
20
+ get payloadsArray(): PayloadWrapper<TPayload>[];
21
+ get previousHashes(): (string | null)[];
22
+ static load(address: DataLike | Huri): Promise<BoundWitnessWrapper<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").XyoBoundWitnessFields & {
23
+ schema: "network.xyo.boundwitness";
24
+ }, import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
25
+ schema: string;
26
+ }> | null>;
27
+ static parse<T extends XyoBoundWitness = XyoBoundWitness, P extends XyoPayload = XyoPayload>(obj: unknown): BoundWitnessWrapper<T, P>;
28
+ dig(depth?: number): BoundWitnessWrapper<TBoundWitness>;
29
+ payloadsBySchema(schema: string): PayloadWrapper<TPayload>[];
30
+ prev(address: string): string | null;
31
+ toResult(): (TBoundWitness | TPayload[])[];
32
+ }
33
+ //# sourceMappingURL=Wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../src/Wrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,eAAe,EAAyB,MAAM,iCAAiC,CAAA;AAElH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAGjF,qBAAa,mBAAmB,CAC9B,aAAa,SAAS,eAAe,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,eAAe,EAC3E,QAAQ,SAAS,UAAU,GAAG,UAAU,CACxC,SAAQ,kBAAkB,CAAC,aAAa,CAAC;IACzC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAA;IACzE,OAAO,CAAC,qBAAqB,CAAO;gBAExB,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE;IAKlG,IAAW,SAAS,aAEnB;IAED,IAAW,YAAY,kBAEtB;IAED,IAAa,MAAM,YAElB;IAED,IAAW,eAAe,aAEzB;IAED,IAAW,aAAa,aAEvB;IAED,IAAW,cAAc,aAExB;IAED,IAAW,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAE9D;IAED,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,SAAS,EAU3H;IAED,IAAW,aAAa,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAErD;IAED,IAAW,cAAc,sBAExB;WAE4B,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;;;;;WAQnC,KAAK,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,CAAC,SAAS,UAAU,GAAG,UAAU,EACzG,GAAG,EAAE,OAAO,GACX,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAWrB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,aAAa,CAAC;IAqBvD,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAI/B,IAAI,CAAC,OAAO,EAAE,MAAM;IAIpB,QAAQ;CAGhB"}
@@ -0,0 +1,96 @@
1
+ import { assertEx } from '@xylabs/assert';
2
+ import { isXyoBoundWitnessPayload, XyoBoundWitnessSchema } from '@xyo-network/boundwitness-model';
3
+ import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator';
4
+ import { Huri } from '@xyo-network/huri';
5
+ import { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper';
6
+ import compact from 'lodash/compact';
7
+ export class BoundWitnessWrapper extends PayloadWrapperBase {
8
+ _payloads;
9
+ isBoundWitnessWrapper = true;
10
+ constructor(boundwitness, payloads) {
11
+ super(boundwitness);
12
+ this.payloads = payloads ? compact(payloads) : undefined;
13
+ }
14
+ get addresses() {
15
+ return this.boundwitness.addresses;
16
+ }
17
+ get boundwitness() {
18
+ return this.obj;
19
+ }
20
+ get errors() {
21
+ return new BoundWitnessValidator(this.boundwitness).validate();
22
+ }
23
+ get missingPayloads() {
24
+ return this.payloadHashes.filter((hash) => !this.payloads[hash]);
25
+ }
26
+ get payloadHashes() {
27
+ return this.boundwitness.payload_hashes;
28
+ }
29
+ get payloadSchemas() {
30
+ return this.boundwitness.payload_schemas;
31
+ }
32
+ get payloads() {
33
+ return this._payloads ?? {};
34
+ }
35
+ set payloads(payloads) {
36
+ if (Array.isArray(payloads)) {
37
+ this._payloads = payloads?.reduce((map, payload) => {
38
+ const wrapper = PayloadWrapper.parse(payload);
39
+ map[wrapper.hash] = wrapper;
40
+ return map;
41
+ }, {});
42
+ }
43
+ else {
44
+ this._payloads = payloads;
45
+ }
46
+ }
47
+ get payloadsArray() {
48
+ return Object.values(this._payloads ?? {});
49
+ }
50
+ get previousHashes() {
51
+ return this.boundwitness.previous_hashes;
52
+ }
53
+ static async load(address) {
54
+ const payload = await new Huri(address).fetch();
55
+ assertEx(payload && isXyoBoundWitnessPayload(payload), 'Attempt to load non-boundwitness');
56
+ const boundWitness = payload && isXyoBoundWitnessPayload(payload) ? payload : undefined;
57
+ return boundWitness ? new BoundWitnessWrapper(boundWitness) : null;
58
+ }
59
+ static parse(obj) {
60
+ assertEx(!Array.isArray(obj), 'Array can not be converted to BoundWitnessWrapper');
61
+ switch (typeof obj) {
62
+ case 'object': {
63
+ const castWrapper = obj;
64
+ return castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(obj);
65
+ }
66
+ }
67
+ throw Error(`Unable to parse [${typeof obj}]`);
68
+ }
69
+ dig(depth) {
70
+ if (depth === 0)
71
+ return this;
72
+ const innerBoundwitnessIndex = this.payloadSchemas.findIndex((item) => item === XyoBoundWitnessSchema);
73
+ if (innerBoundwitnessIndex > -1) {
74
+ const innerBoundwitnessHash = this.payloadHashes[innerBoundwitnessIndex];
75
+ const innerBoundwitnessPayload = this.payloads[innerBoundwitnessHash];
76
+ const innerBoundwitness = innerBoundwitnessPayload
77
+ ? new BoundWitnessWrapper(innerBoundwitnessPayload.body, this.payloadsArray.filter((payload) => payload.hash !== innerBoundwitnessHash).map((item) => item.body))
78
+ : undefined;
79
+ if (innerBoundwitness) {
80
+ return innerBoundwitness.dig(depth ? depth - 1 : undefined);
81
+ }
82
+ }
83
+ assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`);
84
+ return this;
85
+ }
86
+ payloadsBySchema(schema) {
87
+ return Object.values(this.payloads)?.filter((payload) => payload.schemaName === schema);
88
+ }
89
+ prev(address) {
90
+ return this.previousHashes[this.addresses.findIndex((addr) => address === addr)];
91
+ }
92
+ toResult() {
93
+ return [this.boundwitness, this.payloadsArray.map((payload) => payload.body)];
94
+ }
95
+ }
96
+ //# sourceMappingURL=Wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../src/Wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './Wrapper';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './Wrapper';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@xyo-network/boundwitness-wrapper",
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/assert": "^2.6.12",
14
+ "@xyo-network/boundwitness-model": "^2.42.16",
15
+ "@xyo-network/boundwitness-validator": "^2.42.16",
16
+ "@xyo-network/core": "^2.42.16",
17
+ "@xyo-network/huri": "^2.42.15",
18
+ "@xyo-network/payload-model": "^2.42.15",
19
+ "@xyo-network/payload-wrapper": "^2.42.15",
20
+ "lodash": "^4.17.21"
21
+ },
22
+ "description": "Primary SDK for using XYO Protocol 2.0",
23
+ "devDependencies": {
24
+ "@types/lodash": "^4.14.191",
25
+ "@xylabs/ts-scripts-yarn3": "^2.10.25"
26
+ },
27
+ "peerDependencies": {
28
+ "axios": "^1.2.1"
29
+ },
30
+ "browser": "dist/esm/index.js",
31
+ "docs": "dist/docs.json",
32
+ "exports": {
33
+ ".": {
34
+ "node": {
35
+ "import": "./dist/esm/index.js",
36
+ "require": "./dist/cjs/index.js"
37
+ },
38
+ "browser": {
39
+ "import": "./dist/esm/index.js",
40
+ "require": "./dist/cjs/index.js"
41
+ },
42
+ "default": "./dist/esm/index.js"
43
+ },
44
+ "./dist/docs.json": {
45
+ "default": "./dist/docs.json"
46
+ },
47
+ "./package.json": "./package.json"
48
+ },
49
+ "main": "dist/cjs/index.js",
50
+ "module": "dist/esm/index.js",
51
+ "homepage": "https://xyo.network",
52
+ "license": "LGPL-3.0-only",
53
+ "publishConfig": {
54
+ "access": "public"
55
+ },
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
59
+ },
60
+ "sideEffects": false,
61
+ "types": "dist/esm/index.d.ts",
62
+ "version": "2.42.16"
63
+ }
package/src/Wrapper.ts ADDED
@@ -0,0 +1,123 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { isXyoBoundWitnessPayload, XyoBoundWitness, XyoBoundWitnessSchema } from '@xyo-network/boundwitness-model'
3
+ import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
4
+ import { DataLike } from '@xyo-network/core'
5
+ import { Huri } from '@xyo-network/huri'
6
+ import { XyoPayload } from '@xyo-network/payload-model'
7
+ import { PayloadWrapper, PayloadWrapperBase } from '@xyo-network/payload-wrapper'
8
+ import compact from 'lodash/compact'
9
+
10
+ export class BoundWitnessWrapper<
11
+ TBoundWitness extends XyoBoundWitness<{ schema: string }> = XyoBoundWitness,
12
+ TPayload extends XyoPayload = XyoPayload,
13
+ > extends PayloadWrapperBase<TBoundWitness> {
14
+ protected _payloads: Record<string, PayloadWrapper<TPayload>> | undefined
15
+ private isBoundWitnessWrapper = true
16
+
17
+ constructor(boundwitness: TBoundWitness, payloads?: (TPayload | PayloadWrapper<TPayload> | null)[]) {
18
+ super(boundwitness)
19
+ this.payloads = payloads ? compact(payloads) : undefined
20
+ }
21
+
22
+ public get addresses() {
23
+ return this.boundwitness.addresses
24
+ }
25
+
26
+ public get boundwitness() {
27
+ return this.obj
28
+ }
29
+
30
+ override get errors() {
31
+ return new BoundWitnessValidator(this.boundwitness).validate()
32
+ }
33
+
34
+ public get missingPayloads() {
35
+ return this.payloadHashes.filter((hash) => !this.payloads[hash])
36
+ }
37
+
38
+ public get payloadHashes() {
39
+ return this.boundwitness.payload_hashes
40
+ }
41
+
42
+ public get payloadSchemas() {
43
+ return this.boundwitness.payload_schemas
44
+ }
45
+
46
+ public get payloads(): Record<string, PayloadWrapper<TPayload>> {
47
+ return this._payloads ?? {}
48
+ }
49
+
50
+ public set payloads(payloads: Record<string, PayloadWrapper<TPayload>> | (TPayload | PayloadWrapper<TPayload>)[] | undefined) {
51
+ if (Array.isArray(payloads)) {
52
+ this._payloads = payloads?.reduce((map, payload) => {
53
+ const wrapper = PayloadWrapper.parse<TPayload>(payload)
54
+ map[wrapper.hash] = wrapper
55
+ return map
56
+ }, {} as Record<string, PayloadWrapper<TPayload>>)
57
+ } else {
58
+ this._payloads = payloads
59
+ }
60
+ }
61
+
62
+ public get payloadsArray(): PayloadWrapper<TPayload>[] {
63
+ return Object.values(this._payloads ?? {})
64
+ }
65
+
66
+ public get previousHashes() {
67
+ return this.boundwitness.previous_hashes
68
+ }
69
+
70
+ public static override async load(address: DataLike | Huri) {
71
+ const payload = await new Huri(address).fetch()
72
+ assertEx(payload && isXyoBoundWitnessPayload(payload), 'Attempt to load non-boundwitness')
73
+
74
+ const boundWitness: XyoBoundWitness | undefined = payload && isXyoBoundWitnessPayload(payload) ? payload : undefined
75
+ return boundWitness ? new BoundWitnessWrapper(boundWitness) : null
76
+ }
77
+
78
+ public static override parse<T extends XyoBoundWitness = XyoBoundWitness, P extends XyoPayload = XyoPayload>(
79
+ obj: unknown,
80
+ ): BoundWitnessWrapper<T, P> {
81
+ assertEx(!Array.isArray(obj), 'Array can not be converted to BoundWitnessWrapper')
82
+ switch (typeof obj) {
83
+ case 'object': {
84
+ const castWrapper = obj as BoundWitnessWrapper<T, P>
85
+ return castWrapper?.isBoundWitnessWrapper ? castWrapper : new BoundWitnessWrapper(obj as T)
86
+ }
87
+ }
88
+ throw Error(`Unable to parse [${typeof obj}]`)
89
+ }
90
+
91
+ public dig(depth?: number): BoundWitnessWrapper<TBoundWitness> {
92
+ if (depth === 0) return this
93
+
94
+ const innerBoundwitnessIndex: number = this.payloadSchemas.findIndex((item) => item === XyoBoundWitnessSchema)
95
+ if (innerBoundwitnessIndex > -1) {
96
+ const innerBoundwitnessHash: string = this.payloadHashes[innerBoundwitnessIndex]
97
+ const innerBoundwitnessPayload = this.payloads[innerBoundwitnessHash]
98
+ const innerBoundwitness: BoundWitnessWrapper<TBoundWitness> | undefined = innerBoundwitnessPayload
99
+ ? new BoundWitnessWrapper<TBoundWitness>(
100
+ innerBoundwitnessPayload.body as unknown as TBoundWitness,
101
+ this.payloadsArray.filter((payload) => payload.hash !== innerBoundwitnessHash).map((item) => item.body as unknown as TBoundWitness),
102
+ )
103
+ : undefined
104
+ if (innerBoundwitness) {
105
+ return innerBoundwitness.dig(depth ? depth - 1 : undefined)
106
+ }
107
+ }
108
+ assertEx(!depth, `Dig failed [Remaining Depth: ${depth}]`)
109
+ return this
110
+ }
111
+
112
+ public payloadsBySchema(schema: string) {
113
+ return Object.values(this.payloads)?.filter((payload) => payload.schemaName === schema)
114
+ }
115
+
116
+ public prev(address: string) {
117
+ return this.previousHashes[this.addresses.findIndex((addr) => address === addr)]
118
+ }
119
+
120
+ public toResult() {
121
+ return [this.boundwitness, this.payloadsArray.map((payload) => payload.body)]
122
+ }
123
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './Wrapper'