@xyo-network/react-standard-node 2.45.2
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 +13 -0
- package/dist/cjs/components/ActiveStandardNode.js +50 -0
- package/dist/cjs/components/ActiveStandardNode.js.map +1 -0
- package/dist/cjs/components/index.js +5 -0
- package/dist/cjs/components/index.js.map +1 -0
- package/dist/cjs/contexts/StandardRemoteNodes/Context.js +6 -0
- package/dist/cjs/contexts/StandardRemoteNodes/Context.js.map +1 -0
- package/dist/cjs/contexts/StandardRemoteNodes/Providers.js +43 -0
- package/dist/cjs/contexts/StandardRemoteNodes/Providers.js.map +1 -0
- package/dist/cjs/contexts/StandardRemoteNodes/State.js +3 -0
- package/dist/cjs/contexts/StandardRemoteNodes/State.js.map +1 -0
- package/dist/cjs/contexts/StandardRemoteNodes/index.js +8 -0
- package/dist/cjs/contexts/StandardRemoteNodes/index.js.map +1 -0
- package/dist/cjs/contexts/StandardRemoteNodes/use.js +8 -0
- package/dist/cjs/contexts/StandardRemoteNodes/use.js.map +1 -0
- package/dist/cjs/contexts/index.js +5 -0
- package/dist/cjs/contexts/index.js.map +1 -0
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/Builders/MemoryNodeBuilder.js +97 -0
- package/dist/cjs/lib/Builders/MemoryNodeBuilder.js.map +1 -0
- package/dist/cjs/lib/Builders/SentinelBuilder.js +34 -0
- package/dist/cjs/lib/Builders/SentinelBuilder.js.map +1 -0
- package/dist/cjs/lib/Builders/StorageArchivistBuilder.js +62 -0
- package/dist/cjs/lib/Builders/StorageArchivistBuilder.js.map +1 -0
- package/dist/cjs/lib/Builders/index.js +7 -0
- package/dist/cjs/lib/Builders/index.js.map +1 -0
- package/dist/cjs/lib/ModuleAccountPaths.js +25 -0
- package/dist/cjs/lib/ModuleAccountPaths.js.map +1 -0
- package/dist/cjs/lib/ModuleNames.js +6 -0
- package/dist/cjs/lib/ModuleNames.js.map +1 -0
- package/dist/cjs/lib/buildNodes.js +43 -0
- package/dist/cjs/lib/buildNodes.js.map +1 -0
- package/dist/cjs/lib/index.js +8 -0
- package/dist/cjs/lib/index.js.map +1 -0
- package/dist/docs.json +3862 -0
- package/dist/esm/components/ActiveStandardNode.js +44 -0
- package/dist/esm/components/ActiveStandardNode.js.map +1 -0
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/components/index.js.map +1 -0
- package/dist/esm/contexts/StandardRemoteNodes/Context.js +3 -0
- package/dist/esm/contexts/StandardRemoteNodes/Context.js.map +1 -0
- package/dist/esm/contexts/StandardRemoteNodes/Providers.js +36 -0
- package/dist/esm/contexts/StandardRemoteNodes/Providers.js.map +1 -0
- package/dist/esm/contexts/StandardRemoteNodes/State.js +2 -0
- package/dist/esm/contexts/StandardRemoteNodes/State.js.map +1 -0
- package/dist/esm/contexts/StandardRemoteNodes/index.js +5 -0
- package/dist/esm/contexts/StandardRemoteNodes/index.js.map +1 -0
- package/dist/esm/contexts/StandardRemoteNodes/use.js +4 -0
- package/dist/esm/contexts/StandardRemoteNodes/use.js.map +1 -0
- package/dist/esm/contexts/index.js +2 -0
- package/dist/esm/contexts/index.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/Builders/MemoryNodeBuilder.js +80 -0
- package/dist/esm/lib/Builders/MemoryNodeBuilder.js.map +1 -0
- package/dist/esm/lib/Builders/SentinelBuilder.js +35 -0
- package/dist/esm/lib/Builders/SentinelBuilder.js.map +1 -0
- package/dist/esm/lib/Builders/StorageArchivistBuilder.js +54 -0
- package/dist/esm/lib/Builders/StorageArchivistBuilder.js.map +1 -0
- package/dist/esm/lib/Builders/index.js +4 -0
- package/dist/esm/lib/Builders/index.js.map +1 -0
- package/dist/esm/lib/ModuleAccountPaths.js +22 -0
- package/dist/esm/lib/ModuleAccountPaths.js.map +1 -0
- package/dist/esm/lib/ModuleNames.js +3 -0
- package/dist/esm/lib/ModuleNames.js.map +1 -0
- package/dist/esm/lib/buildNodes.js +37 -0
- package/dist/esm/lib/buildNodes.js.map +1 -0
- package/dist/esm/lib/index.js +5 -0
- package/dist/esm/lib/index.js.map +1 -0
- package/dist/types/components/ActiveStandardNode.d.ts +7 -0
- package/dist/types/components/ActiveStandardNode.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/contexts/StandardRemoteNodes/Context.d.ts +4 -0
- package/dist/types/contexts/StandardRemoteNodes/Context.d.ts.map +1 -0
- package/dist/types/contexts/StandardRemoteNodes/Providers.d.ts +11 -0
- package/dist/types/contexts/StandardRemoteNodes/Providers.d.ts.map +1 -0
- package/dist/types/contexts/StandardRemoteNodes/State.d.ts +7 -0
- package/dist/types/contexts/StandardRemoteNodes/State.d.ts.map +1 -0
- package/dist/types/contexts/StandardRemoteNodes/index.d.ts +5 -0
- package/dist/types/contexts/StandardRemoteNodes/index.d.ts.map +1 -0
- package/dist/types/contexts/StandardRemoteNodes/use.d.ts +2 -0
- package/dist/types/contexts/StandardRemoteNodes/use.d.ts.map +1 -0
- package/dist/types/contexts/index.d.ts +2 -0
- package/dist/types/contexts/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/Builders/MemoryNodeBuilder.d.ts +50 -0
- package/dist/types/lib/Builders/MemoryNodeBuilder.d.ts.map +1 -0
- package/dist/types/lib/Builders/SentinelBuilder.d.ts +48 -0
- package/dist/types/lib/Builders/SentinelBuilder.d.ts.map +1 -0
- package/dist/types/lib/Builders/StorageArchivistBuilder.d.ts +21 -0
- package/dist/types/lib/Builders/StorageArchivistBuilder.d.ts.map +1 -0
- package/dist/types/lib/Builders/index.d.ts +4 -0
- package/dist/types/lib/Builders/index.d.ts.map +1 -0
- package/dist/types/lib/ModuleAccountPaths.d.ts +4 -0
- package/dist/types/lib/ModuleAccountPaths.d.ts.map +1 -0
- package/dist/types/lib/ModuleNames.d.ts +3 -0
- package/dist/types/lib/ModuleNames.d.ts.map +1 -0
- package/dist/types/lib/buildNodes.d.ts +4 -0
- package/dist/types/lib/buildNodes.d.ts.map +1 -0
- package/dist/types/lib/index.d.ts +5 -0
- package/dist/types/lib/index.d.ts.map +1 -0
- package/package.json +88 -0
- package/src/components/ActiveStandardNode.tsx +53 -0
- package/src/components/index.ts +1 -0
- package/src/contexts/StandardRemoteNodes/Context.ts +5 -0
- package/src/contexts/StandardRemoteNodes/Providers.tsx +59 -0
- package/src/contexts/StandardRemoteNodes/State.ts +7 -0
- package/src/contexts/StandardRemoteNodes/index.ts +4 -0
- package/src/contexts/StandardRemoteNodes/use.tsx +5 -0
- package/src/contexts/index.ts +1 -0
- package/src/index.ts +3 -0
- package/src/lib/Builders/MemoryNodeBuilder.ts +98 -0
- package/src/lib/Builders/SentinelBuilder.ts +44 -0
- package/src/lib/Builders/StorageArchivistBuilder.ts +57 -0
- package/src/lib/Builders/index.ts +3 -0
- package/src/lib/ModuleAccountPaths.ts +24 -0
- package/src/lib/ModuleNames.ts +3 -0
- package/src/lib/buildNodes.ts +46 -0
- package/src/lib/index.ts +4 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
2
|
+
import { MemorySentinel, SentinelParams } from '@xyo-network/sentinel';
|
|
3
|
+
export type SentinelCallbacks = Pick<SentinelParams, 'onReportEnd' | 'onReportStart' | 'onWitnessReportStart' | 'onWitnessReportEnd'>;
|
|
4
|
+
export interface SentinelBuilderConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
witnesses: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class SentinelBuilder {
|
|
9
|
+
private config;
|
|
10
|
+
private account;
|
|
11
|
+
private _sentinel;
|
|
12
|
+
protected constructor(config: SentinelBuilderConfig, account: AccountInstance);
|
|
13
|
+
get sentinel(): MemorySentinel<import("@xyo-network/sentinel").MemorySentinelParams<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
|
|
14
|
+
name?: string | undefined;
|
|
15
|
+
security?: {
|
|
16
|
+
allowAnonymous?: boolean | undefined;
|
|
17
|
+
allowed?: Record<string, (string | import("@xyo-network/module-model").CosigningAddressSet)[]> | undefined;
|
|
18
|
+
disallowed?: Record<string, string[]> | undefined;
|
|
19
|
+
} | undefined;
|
|
20
|
+
storeQueries?: boolean | undefined;
|
|
21
|
+
} & {
|
|
22
|
+
archivists?: string[] | undefined;
|
|
23
|
+
schema: string;
|
|
24
|
+
} & {
|
|
25
|
+
witnesses?: string[] | undefined;
|
|
26
|
+
} & {
|
|
27
|
+
schema: string;
|
|
28
|
+
}>>;
|
|
29
|
+
static create(config: SentinelBuilderConfig, account: AccountInstance, callbacks: SentinelCallbacks): Promise<SentinelBuilder>;
|
|
30
|
+
buildSentinel(callbacks: SentinelCallbacks): Promise<MemorySentinel<import("@xyo-network/sentinel").MemorySentinelParams<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
|
|
31
|
+
name?: string | undefined;
|
|
32
|
+
security?: {
|
|
33
|
+
allowAnonymous?: boolean | undefined;
|
|
34
|
+
allowed?: Record<string, (string | import("@xyo-network/module-model").CosigningAddressSet)[]> | undefined;
|
|
35
|
+
disallowed?: Record<string, string[]> | undefined;
|
|
36
|
+
} | undefined;
|
|
37
|
+
storeQueries?: boolean | undefined;
|
|
38
|
+
} & {
|
|
39
|
+
archivists?: string[] | undefined;
|
|
40
|
+
schema: string;
|
|
41
|
+
} & {
|
|
42
|
+
witnesses?: string[] | undefined;
|
|
43
|
+
} & {
|
|
44
|
+
schema: string;
|
|
45
|
+
}>>>;
|
|
46
|
+
private buildParams;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=SentinelBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SentinelBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/Builders/SentinelBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,cAAc,EAAwB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE5F,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC,CAAA;AAErI,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,qBAAa,eAAe;IAGJ,OAAO,CAAC,MAAM;IAAyB,OAAO,CAAC,OAAO;IAF5E,OAAO,CAAC,SAAS,CAA4B;IAE7C,SAAS,aAAqB,MAAM,EAAE,qBAAqB,EAAU,OAAO,EAAE,eAAe;IAI7F,IAAI,QAAQ;;;;;;;;;;;;;;;QAEX;WAEY,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAM9H,aAAa,CAAC,SAAS,EAAE,iBAAiB;;;;;;;;;;;;;;;;IAKhD,OAAO,CAAC,WAAW;CAUpB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AccountInstance } from '@xyo-network/account-model';
|
|
2
|
+
import { ArchivistModule, StorageArchivistConfig, XyoStorageArchivist } from '@xyo-network/archivist';
|
|
3
|
+
import { MemoryNode } from '@xyo-network/node';
|
|
4
|
+
export interface ArchivistBuilderConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
namespace: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class StorageArchivistBuilder {
|
|
9
|
+
private config;
|
|
10
|
+
private account;
|
|
11
|
+
private node;
|
|
12
|
+
private _archivist;
|
|
13
|
+
private remoteArchivist;
|
|
14
|
+
protected constructor(config: ArchivistBuilderConfig, account: AccountInstance, node: MemoryNode);
|
|
15
|
+
get archivist(): XyoStorageArchivist;
|
|
16
|
+
static create(config: ArchivistBuilderConfig, account: AccountInstance, node: MemoryNode): Promise<StorageArchivistBuilder>;
|
|
17
|
+
buildArchivist(): Promise<XyoStorageArchivist>;
|
|
18
|
+
buildConfig(): StorageArchivistConfig;
|
|
19
|
+
findParentArchivist(): Promise<ArchivistModule | undefined>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=StorageArchivistBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageArchivistBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/Builders/StorageArchivistBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAgC,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACnI,OAAO,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAA;AAG3D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AACD,qBAAa,uBAAuB;IAIZ,OAAO,CAAC,MAAM;IAA0B,OAAO,CAAC,OAAO;IAAmB,OAAO,CAAC,IAAI;IAH5G,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,eAAe,CAA6B;IAEpD,SAAS,aAAqB,MAAM,EAAE,sBAAsB,EAAU,OAAO,EAAE,eAAe,EAAU,IAAI,EAAE,UAAU;IAExH,IAAI,SAAS,wBAEZ;WAEY,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAO3H,cAAc;IAKpB,WAAW,IAAI,sBAAsB;IAa/B,mBAAmB;CAY1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/Builders/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleAccountPaths.d.ts","sourceRoot":"","sources":["../../../src/lib/ModuleAccountPaths.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,OAAO,CAAA;AAExC,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIxD,CAAA;AAED,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAajF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleNames.d.ts","sourceRoot":"","sources":["../../../src/lib/ModuleNames.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAAe,CAAA;AAEtC,eAAO,MAAM,oBAAoB,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildNodes.d.ts","sourceRoot":"","sources":["../../../src/lib/buildNodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAwBhD,eAAO,MAAM,kBAAkB,WAAkB,QAAQ,KAAG,QAAQ,UAAU,EAAE,CAoB/E,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xyo-network/react-standard-node",
|
|
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-react-js/issues"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@xylabs/react-shared": "^2.16.11",
|
|
14
|
+
"@xyo-network/account-model": "^2.51.9",
|
|
15
|
+
"@xyo-network/archivist": "^2.51.9",
|
|
16
|
+
"@xyo-network/bridge": "^2.51.9",
|
|
17
|
+
"@xyo-network/module": "^2.51.9",
|
|
18
|
+
"@xyo-network/node": "^2.51.9",
|
|
19
|
+
"@xyo-network/payloadset-plugin": "^2.51.9",
|
|
20
|
+
"@xyo-network/protocol": "^2.51.9",
|
|
21
|
+
"@xyo-network/react-network": "^2.45.2",
|
|
22
|
+
"@xyo-network/react-node": "^2.45.2",
|
|
23
|
+
"@xyo-network/react-shared": "^2.45.2",
|
|
24
|
+
"@xyo-network/react-wallet": "^2.45.2",
|
|
25
|
+
"@xyo-network/sentinel": "^2.51.9",
|
|
26
|
+
"@xyo-network/witness": "^2.51.9"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@storybook/react": "^6.5.16",
|
|
30
|
+
"@xylabs/ts-scripts-yarn3": "^2.16.1",
|
|
31
|
+
"@xylabs/tsconfig-react": "^2.16.1",
|
|
32
|
+
"require-from-string": "^2.0.2",
|
|
33
|
+
"typescript": "^4.9.5"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@mui/icons-material": "^5",
|
|
37
|
+
"@mui/material": "^5",
|
|
38
|
+
"@mui/styles": "^5",
|
|
39
|
+
"axios": "^1",
|
|
40
|
+
"react": "^18",
|
|
41
|
+
"react-dom": "^18",
|
|
42
|
+
"react-router-dom": "^6"
|
|
43
|
+
},
|
|
44
|
+
"description": "Common React library for all XYO projects that use React",
|
|
45
|
+
"browser": "dist/esm/index.js",
|
|
46
|
+
"docs": "dist/docs.json",
|
|
47
|
+
"exports": {
|
|
48
|
+
".": {
|
|
49
|
+
"node": {
|
|
50
|
+
"import": "./dist/esm/index.js",
|
|
51
|
+
"require": "./dist/cjs/index.js"
|
|
52
|
+
},
|
|
53
|
+
"browser": {
|
|
54
|
+
"import": "./dist/esm/index.js",
|
|
55
|
+
"require": "./dist/cjs/index.js"
|
|
56
|
+
},
|
|
57
|
+
"default": "./dist/esm/index.js"
|
|
58
|
+
},
|
|
59
|
+
"./dist/docs.json": {
|
|
60
|
+
"default": "./dist/docs.json"
|
|
61
|
+
},
|
|
62
|
+
"./package.json": "./package.json"
|
|
63
|
+
},
|
|
64
|
+
"main": "dist/cjs/index.js",
|
|
65
|
+
"module": "dist/esm/index.js",
|
|
66
|
+
"homepage": "https://xyo.network",
|
|
67
|
+
"keywords": [
|
|
68
|
+
"xyo",
|
|
69
|
+
"utility",
|
|
70
|
+
"typescript",
|
|
71
|
+
"react"
|
|
72
|
+
],
|
|
73
|
+
"license": "LGPL-3.0",
|
|
74
|
+
"publishConfig": {
|
|
75
|
+
"access": "public"
|
|
76
|
+
},
|
|
77
|
+
"repository": {
|
|
78
|
+
"type": "git",
|
|
79
|
+
"url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js.git"
|
|
80
|
+
},
|
|
81
|
+
"scripts": {
|
|
82
|
+
"lint-pkg": "npmPkgJsonLint .",
|
|
83
|
+
"license": "yarn license-checker --exclude \"MIT, ISC, Apache-2.0, BSD, BSD-2-Clause, CC-BY-4.0, Unlicense, CC-BY-3.0, CC0-1.0\""
|
|
84
|
+
},
|
|
85
|
+
"sideEffects": false,
|
|
86
|
+
"types": "dist/types/index.d.ts",
|
|
87
|
+
"version": "2.45.2"
|
|
88
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useAsyncEffect, WithChildren } from '@xylabs/react-shared'
|
|
2
|
+
import { useNetwork } from '@xyo-network/react-network'
|
|
3
|
+
import { useNode } from '@xyo-network/react-node'
|
|
4
|
+
import { assertDefinedEx } from '@xyo-network/react-shared'
|
|
5
|
+
import { useMemo, useState } from 'react'
|
|
6
|
+
|
|
7
|
+
import { useStandardNodes } from '../contexts'
|
|
8
|
+
|
|
9
|
+
export interface ActiveStandardNodeProps extends WithChildren {
|
|
10
|
+
nodeNameOrAddress?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const ActiveStandardNode: React.FC<ActiveStandardNodeProps> = ({ children, nodeNameOrAddress }) => {
|
|
14
|
+
const { network } = useNetwork(true)
|
|
15
|
+
const [node] = useNode(nodeNameOrAddress)
|
|
16
|
+
const [activeRemoteNodeAddress, setActiveRemoteNodeAddress] = useState<string>()
|
|
17
|
+
const { nodes, findAddressByName } = useStandardNodes()
|
|
18
|
+
|
|
19
|
+
const selectedNodeAddress = useMemo(() => {
|
|
20
|
+
if (node && nodes && findAddressByName && network) {
|
|
21
|
+
const selectedNodeAddress = findAddressByName(network.name)
|
|
22
|
+
return assertDefinedEx(selectedNodeAddress, `${network.name} was not found in known remote nodes`)
|
|
23
|
+
}
|
|
24
|
+
}, [findAddressByName, network, node, nodes])
|
|
25
|
+
|
|
26
|
+
// Probably needs to rely on node events rather than provider values to ensure its registered
|
|
27
|
+
useAsyncEffect(
|
|
28
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
+
async (mounted) => {
|
|
30
|
+
if (node && selectedNodeAddress) {
|
|
31
|
+
try {
|
|
32
|
+
if ((await node?.attached())?.includes(selectedNodeAddress)) {
|
|
33
|
+
return
|
|
34
|
+
}
|
|
35
|
+
await node?.attach(selectedNodeAddress, true)
|
|
36
|
+
|
|
37
|
+
if (mounted()) {
|
|
38
|
+
// cleanup
|
|
39
|
+
if (activeRemoteNodeAddress) {
|
|
40
|
+
await node?.detach(activeRemoteNodeAddress)
|
|
41
|
+
}
|
|
42
|
+
setActiveRemoteNodeAddress(selectedNodeAddress)
|
|
43
|
+
}
|
|
44
|
+
} catch (e) {
|
|
45
|
+
console.error('Error Attaching Selected Node Address', e)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
[activeRemoteNodeAddress, node, selectedNodeAddress, nodes],
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
return <>{children}</>
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ActiveStandardNode'
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useAsyncEffect, WithChildren } from '@xylabs/react-shared'
|
|
2
|
+
import { HDWallet } from '@xyo-network/protocol'
|
|
3
|
+
import { assertDefinedEx } from '@xyo-network/react-shared'
|
|
4
|
+
import { useWallet } from '@xyo-network/react-wallet'
|
|
5
|
+
import { useEffect, useMemo, useState } from 'react'
|
|
6
|
+
|
|
7
|
+
import { BuildStandardNodes } from '../../lib'
|
|
8
|
+
import { StandardNodesContext } from './Context'
|
|
9
|
+
import { StandardNodesState } from './State'
|
|
10
|
+
|
|
11
|
+
export interface StandardNodesProviderProps extends WithChildren {
|
|
12
|
+
defaultRemoteNodes?: StandardNodesState['nodes']
|
|
13
|
+
wallet?: HDWallet
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const StandardNodesProvider: React.FC<StandardNodesProviderProps> = ({ children, defaultRemoteNodes, wallet }) => {
|
|
17
|
+
const [nodes, setNodes] = useState<StandardNodesState['nodes']>(defaultRemoteNodes)
|
|
18
|
+
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
setNodes(defaultRemoteNodes)
|
|
21
|
+
}, [defaultRemoteNodes])
|
|
22
|
+
|
|
23
|
+
useAsyncEffect(
|
|
24
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
+
async () => {
|
|
26
|
+
if (wallet) {
|
|
27
|
+
const builtNodes = await BuildStandardNodes(wallet)
|
|
28
|
+
setNodes(builtNodes)
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
[wallet],
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
const findAddressByName = (name?: string) => {
|
|
35
|
+
const validNetworkName = assertDefinedEx(name, 'name was not defined')
|
|
36
|
+
return nodes?.find((node) => node.config.name === validNetworkName)?.address
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<StandardNodesContext.Provider
|
|
41
|
+
value={{
|
|
42
|
+
findAddressByName,
|
|
43
|
+
nodes,
|
|
44
|
+
provided: true,
|
|
45
|
+
}}
|
|
46
|
+
>
|
|
47
|
+
{children}
|
|
48
|
+
</StandardNodesContext.Provider>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const StandardNodesProviderWithWallet: React.FC<Omit<StandardNodesProviderProps, 'wallet'>> = (props) => {
|
|
53
|
+
const { wallet: walletFromCtx, activeAccountIndex } = useWallet()
|
|
54
|
+
const wallet = useMemo(
|
|
55
|
+
() => (walletFromCtx && activeAccountIndex !== undefined ? walletFromCtx.derivePath(activeAccountIndex.toString()) : undefined),
|
|
56
|
+
[activeAccountIndex, walletFromCtx],
|
|
57
|
+
)
|
|
58
|
+
return <StandardNodesProvider wallet={wallet} {...props} />
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './StandardRemoteNodes'
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { AccountInstance } from '@xyo-network/account-model'
|
|
2
|
+
import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge'
|
|
3
|
+
import { Module } from '@xyo-network/module'
|
|
4
|
+
import { MemoryNode, NodeConfigSchema, NodeWrapper } from '@xyo-network/node'
|
|
5
|
+
import { PayloadSetPluginResolver } from '@xyo-network/payloadset-plugin'
|
|
6
|
+
import { assertDefinedEx } from '@xyo-network/react-shared'
|
|
7
|
+
import { WitnessModule } from '@xyo-network/witness'
|
|
8
|
+
|
|
9
|
+
import { SentinelBuilder, SentinelBuilderConfig, SentinelCallbacks } from './SentinelBuilder'
|
|
10
|
+
import { StorageArchivistBuilder } from './StorageArchivistBuilder'
|
|
11
|
+
|
|
12
|
+
interface MemoryNodeBuilderConfig {
|
|
13
|
+
name?: string
|
|
14
|
+
node?: MemoryNode
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class MemoryNodeBuilder {
|
|
18
|
+
private _node: MemoryNode | undefined
|
|
19
|
+
private _wrappedNode: NodeWrapper | undefined
|
|
20
|
+
|
|
21
|
+
get node() {
|
|
22
|
+
return assertDefinedEx(this._node, 'this._node was not defined upon create')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get wrappedNode() {
|
|
26
|
+
return assertDefinedEx(this._wrappedNode, 'this._wrappedNode was not defined upon create')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
static async create({ name, node }: MemoryNodeBuilderConfig, account?: AccountInstance): Promise<MemoryNodeBuilder> {
|
|
30
|
+
const instance = new this()
|
|
31
|
+
|
|
32
|
+
let memoryNode: MemoryNode
|
|
33
|
+
if (node) {
|
|
34
|
+
memoryNode = node
|
|
35
|
+
} else {
|
|
36
|
+
memoryNode = await MemoryNode.create({ account, config: { name, schema: NodeConfigSchema } })
|
|
37
|
+
}
|
|
38
|
+
instance._node = memoryNode
|
|
39
|
+
instance._wrappedNode = NodeWrapper.wrap(memoryNode)
|
|
40
|
+
return instance
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async addArchivist(account: AccountInstance, moduleName: string, namespace: string) {
|
|
44
|
+
const config = { name: moduleName, namespace }
|
|
45
|
+
const { archivist } = await StorageArchivistBuilder.create(config, account, this.node)
|
|
46
|
+
|
|
47
|
+
await this.attach(archivist, true)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async addBridge(apiDomain: string) {
|
|
51
|
+
try {
|
|
52
|
+
const bridge = await HttpBridge.create({
|
|
53
|
+
config: { name: 'RemoteNodeBridge', nodeUri: `${apiDomain}/node`, schema: HttpBridgeConfigSchema, security: { allowAnonymous: true } },
|
|
54
|
+
})
|
|
55
|
+
await this.attach(bridge, true)
|
|
56
|
+
} catch (e) {
|
|
57
|
+
console.error('Error Creating Bridge', e)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async addSentinel(config: SentinelBuilderConfig, account: AccountInstance, callbacks: SentinelCallbacks) {
|
|
62
|
+
const { sentinel } = await SentinelBuilder.create(config, account, callbacks)
|
|
63
|
+
await this.attach(sentinel, true, true)
|
|
64
|
+
return sentinel
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async addWitnesses(pluginSetResolver: PayloadSetPluginResolver, witnesses: (() => Promise<WitnessModule>)[] = []) {
|
|
68
|
+
await Promise.all(
|
|
69
|
+
pluginSetResolver.witnesses().map(async (pluginSet, index) => {
|
|
70
|
+
// Pass the prebuilt witness at the same index
|
|
71
|
+
const witness = await witnesses?.[index]?.()
|
|
72
|
+
if (witness) {
|
|
73
|
+
try {
|
|
74
|
+
await this.node.register(witness).attach(witness.address, true)
|
|
75
|
+
} catch (e) {
|
|
76
|
+
console.error('Error attaching witness', JSON.stringify(pluginSet, null, 2), e)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}),
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private async attach(module: Module, external?: boolean, safeAttach?: boolean) {
|
|
84
|
+
try {
|
|
85
|
+
if (safeAttach) {
|
|
86
|
+
const existingModule = await this.wrappedNode.resolve(module.address)
|
|
87
|
+
if (existingModule) {
|
|
88
|
+
await this.node.detach(existingModule.address)
|
|
89
|
+
await this.node.unregister(existingModule)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
this.node.register(module)
|
|
93
|
+
await this.node.attach(module.address, external)
|
|
94
|
+
} catch (e) {
|
|
95
|
+
throw Error(`Error adding ${module.config.name ?? module.address} to MemoryNode: ${e}`)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AccountInstance } from '@xyo-network/account-model'
|
|
2
|
+
import { assertDefinedEx } from '@xyo-network/react-shared'
|
|
3
|
+
import { MemorySentinel, SentinelConfigSchema, SentinelParams } from '@xyo-network/sentinel'
|
|
4
|
+
|
|
5
|
+
export type SentinelCallbacks = Pick<SentinelParams, 'onReportEnd' | 'onReportStart' | 'onWitnessReportStart' | 'onWitnessReportEnd'>
|
|
6
|
+
|
|
7
|
+
export interface SentinelBuilderConfig {
|
|
8
|
+
name: string
|
|
9
|
+
witnesses: string[]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class SentinelBuilder {
|
|
13
|
+
private _sentinel: MemorySentinel | undefined
|
|
14
|
+
|
|
15
|
+
protected constructor(private config: SentinelBuilderConfig, private account: AccountInstance) {
|
|
16
|
+
assertDefinedEx(config, 'config was not defined')
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get sentinel() {
|
|
20
|
+
return assertDefinedEx(this._sentinel, 'this._sentinel not defined upon create')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static async create(config: SentinelBuilderConfig, account: AccountInstance, callbacks: SentinelCallbacks): Promise<SentinelBuilder> {
|
|
24
|
+
const instance = new this(config, account)
|
|
25
|
+
instance._sentinel = await instance.buildSentinel(callbacks)
|
|
26
|
+
return instance
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async buildSentinel(callbacks: SentinelCallbacks) {
|
|
30
|
+
const params = this.buildParams(callbacks)
|
|
31
|
+
return await MemorySentinel.create(params)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private buildParams(callbacks: SentinelCallbacks): SentinelParams {
|
|
35
|
+
return {
|
|
36
|
+
config: {
|
|
37
|
+
...this.config,
|
|
38
|
+
schema: SentinelConfigSchema,
|
|
39
|
+
},
|
|
40
|
+
...callbacks,
|
|
41
|
+
account: this.account,
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AccountInstance } from '@xyo-network/account-model'
|
|
2
|
+
import { ArchivistModule, StorageArchivistConfig, StorageArchivistConfigSchema, XyoStorageArchivist } from '@xyo-network/archivist'
|
|
3
|
+
import { MemoryNode, NodeWrapper } from '@xyo-network/node'
|
|
4
|
+
import { assertDefinedEx } from '@xyo-network/react-shared'
|
|
5
|
+
|
|
6
|
+
export interface ArchivistBuilderConfig {
|
|
7
|
+
name: string
|
|
8
|
+
namespace: string
|
|
9
|
+
}
|
|
10
|
+
export class StorageArchivistBuilder {
|
|
11
|
+
private _archivist: XyoStorageArchivist | undefined
|
|
12
|
+
private remoteArchivist: ArchivistModule | undefined
|
|
13
|
+
|
|
14
|
+
protected constructor(private config: ArchivistBuilderConfig, private account: AccountInstance, private node: MemoryNode) {}
|
|
15
|
+
|
|
16
|
+
get archivist() {
|
|
17
|
+
return assertDefinedEx(this._archivist, 'archivist was not defined upon create')
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static async create(config: ArchivistBuilderConfig, account: AccountInstance, node: MemoryNode): Promise<StorageArchivistBuilder> {
|
|
21
|
+
const instance = new this(config, account, node)
|
|
22
|
+
instance.remoteArchivist = await instance.findParentArchivist()
|
|
23
|
+
instance._archivist = await instance.buildArchivist()
|
|
24
|
+
return instance
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async buildArchivist() {
|
|
28
|
+
const config = this.buildConfig()
|
|
29
|
+
return await XyoStorageArchivist.create({ account: this.account, config })
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
buildConfig(): StorageArchivistConfig {
|
|
33
|
+
return {
|
|
34
|
+
name: this.config.name,
|
|
35
|
+
namespace: this.config.namespace,
|
|
36
|
+
parents: {
|
|
37
|
+
commit: this.remoteArchivist ? [this.remoteArchivist?.address] : undefined,
|
|
38
|
+
read: this.remoteArchivist ? [this.remoteArchivist?.address] : undefined,
|
|
39
|
+
},
|
|
40
|
+
schema: StorageArchivistConfigSchema,
|
|
41
|
+
type: 'local',
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async findParentArchivist() {
|
|
46
|
+
const wrappedNode = new NodeWrapper(assertDefinedEx(this.node, 'node not defined'), this.account)
|
|
47
|
+
const [bridge] = (await wrappedNode.resolve({ name: ['RemoteNodeBridge'] })) ?? []
|
|
48
|
+
if (bridge) {
|
|
49
|
+
try {
|
|
50
|
+
const [archivist] = (await bridge.downResolver.resolve({ name: ['Archivist'] })) ?? []
|
|
51
|
+
return archivist as ArchivistModule
|
|
52
|
+
} catch (e) {
|
|
53
|
+
console.error('Error Resolving Parent Archivist', this.node?.config.name, this.config)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { RootStorageArchivist } from './ModuleNames'
|
|
2
|
+
|
|
3
|
+
export const GlobalNodeOffsetPath = '15'
|
|
4
|
+
|
|
5
|
+
export const RemoteNodeOffsetPaths: Record<string, string> = {
|
|
6
|
+
Kerplunk: '112',
|
|
7
|
+
Local: '111',
|
|
8
|
+
Main: '113',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const RemoteNodeArchivistOffsetPaths: Record<string, Record<string, string>> = {
|
|
12
|
+
Kerplunk: {
|
|
13
|
+
MemoryNode: '117',
|
|
14
|
+
[RootStorageArchivist]: '119',
|
|
15
|
+
},
|
|
16
|
+
Local: {
|
|
17
|
+
MemoryNode: '114',
|
|
18
|
+
[RootStorageArchivist]: '116',
|
|
19
|
+
},
|
|
20
|
+
Main: {
|
|
21
|
+
MemoryNode: '120',
|
|
22
|
+
[RootStorageArchivist]: '122',
|
|
23
|
+
},
|
|
24
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MemoryNode } from '@xyo-network/node'
|
|
2
|
+
import { HDWallet } from '@xyo-network/protocol'
|
|
3
|
+
import { defaultNetworkConfigs } from '@xyo-network/react-network'
|
|
4
|
+
import { assertDefinedEx } from '@xyo-network/react-shared'
|
|
5
|
+
|
|
6
|
+
import { MemoryNodeBuilder } from './Builders'
|
|
7
|
+
import { RemoteNodeArchivistOffsetPaths, RemoteNodeOffsetPaths } from './ModuleAccountPaths'
|
|
8
|
+
import { RootStorageArchivist } from './ModuleNames'
|
|
9
|
+
|
|
10
|
+
const MainApiUrlFallback = 'https://beta.api.archivist.xyo.network'
|
|
11
|
+
|
|
12
|
+
const knownRemoteNodes = (): { apiDomain: string; name: string }[] => {
|
|
13
|
+
const networkNames = defaultNetworkConfigs.map((config) => config.name)
|
|
14
|
+
return networkNames.map((networkName) => {
|
|
15
|
+
const name = assertDefinedEx<string>(networkName, 'missing name in network config')
|
|
16
|
+
const uri = defaultNetworkConfigs.filter((config) => config.name === networkName)[0].nodes?.filter((node) => node.type === 'archivist')[0].uri
|
|
17
|
+
const apiDomain = assertDefinedEx<string>(uri, 'missing node type "archivist" in network config')
|
|
18
|
+
return {
|
|
19
|
+
// Temporary till main is compatible with /node endpoint
|
|
20
|
+
apiDomain: name === 'Main' ? MainApiUrlFallback : apiDomain,
|
|
21
|
+
name,
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const BuildStandardNodes = async (wallet: HDWallet): Promise<MemoryNode[]> => {
|
|
27
|
+
try {
|
|
28
|
+
return await Promise.all(
|
|
29
|
+
knownRemoteNodes().map(async ({ apiDomain, name }) => {
|
|
30
|
+
const remoteNodeOffset = RemoteNodeOffsetPaths[name]
|
|
31
|
+
const remoteNodeWallet = wallet.derivePath(remoteNodeOffset)
|
|
32
|
+
|
|
33
|
+
const memoryNodeBuilder = await MemoryNodeBuilder.create({ name }, remoteNodeWallet.deriveAccount('0'))
|
|
34
|
+
await memoryNodeBuilder.addBridge(apiDomain)
|
|
35
|
+
|
|
36
|
+
const rootArchivistPath = `${remoteNodeOffset}/${RemoteNodeArchivistOffsetPaths[name][RootStorageArchivist]}`
|
|
37
|
+
const rootArchivistAccount = wallet.deriveAccount(rootArchivistPath)
|
|
38
|
+
await memoryNodeBuilder.addArchivist(rootArchivistAccount, RootStorageArchivist, 'root')
|
|
39
|
+
|
|
40
|
+
return assertDefinedEx(memoryNodeBuilder.node, 'Memory Node was not built successfully')
|
|
41
|
+
}),
|
|
42
|
+
)
|
|
43
|
+
} catch (e) {
|
|
44
|
+
throw new Error(`Error Creating Known Remote Nodes: ${e}`)
|
|
45
|
+
}
|
|
46
|
+
}
|