@xyo-network/react-sentinel 2.42.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/cjs/contexts/Context.js +6 -0
  4. package/dist/cjs/contexts/Context.js.map +1 -0
  5. package/dist/cjs/contexts/Provider.js +93 -0
  6. package/dist/cjs/contexts/Provider.js.map +1 -0
  7. package/dist/cjs/contexts/State.js +12 -0
  8. package/dist/cjs/contexts/State.js.map +1 -0
  9. package/dist/cjs/contexts/index.js +8 -0
  10. package/dist/cjs/contexts/index.js.map +1 -0
  11. package/dist/cjs/contexts/use.js +11 -0
  12. package/dist/cjs/contexts/use.js.map +1 -0
  13. package/dist/cjs/index.js +5 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/docs.json +1312 -0
  16. package/dist/esm/contexts/Context.js +3 -0
  17. package/dist/esm/contexts/Context.js.map +1 -0
  18. package/dist/esm/contexts/Provider.js +86 -0
  19. package/dist/esm/contexts/Provider.js.map +1 -0
  20. package/dist/esm/contexts/State.js +9 -0
  21. package/dist/esm/contexts/State.js.map +1 -0
  22. package/dist/esm/contexts/index.js +5 -0
  23. package/dist/esm/contexts/index.js.map +1 -0
  24. package/dist/esm/contexts/use.js +7 -0
  25. package/dist/esm/contexts/use.js.map +1 -0
  26. package/dist/esm/index.js +2 -0
  27. package/dist/esm/index.js.map +1 -0
  28. package/dist/types/contexts/Context.d.ts +4 -0
  29. package/dist/types/contexts/Context.d.ts.map +1 -0
  30. package/dist/types/contexts/Provider.d.ts +17 -0
  31. package/dist/types/contexts/Provider.d.ts.map +1 -0
  32. package/dist/types/contexts/State.d.ts +31 -0
  33. package/dist/types/contexts/State.d.ts.map +1 -0
  34. package/dist/types/contexts/index.d.ts +5 -0
  35. package/dist/types/contexts/index.d.ts.map +1 -0
  36. package/dist/types/contexts/use.d.ts +30 -0
  37. package/dist/types/contexts/use.d.ts.map +1 -0
  38. package/dist/types/index.d.ts +2 -0
  39. package/dist/types/index.d.ts.map +1 -0
  40. package/package.json +81 -0
  41. package/src/contexts/Context.ts +5 -0
  42. package/src/contexts/Provider.tsx +114 -0
  43. package/src/contexts/State.ts +35 -0
  44. package/src/contexts/index.ts +4 -0
  45. package/src/contexts/use.ts +8 -0
  46. package/src/index.ts +1 -0
@@ -0,0 +1,3 @@
1
+ import { createContextEx } from '@xyo-network/react-shared';
2
+ export const SentinelContext = createContextEx();
3
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../src/contexts/Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAI3D,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,EAAwB,CAAA"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { delay } from '@xylabs/delay';
3
+ import { useAsyncEffect } from '@xylabs/react-shared';
4
+ import { ArchivistWrapper } from '@xyo-network/archivist';
5
+ import { CompositeModuleResolver } from '@xyo-network/module';
6
+ import { AbstractSentinel, SentinelConfigSchema } from '@xyo-network/sentinel';
7
+ import { useEffect, useMemo, useState } from 'react';
8
+ import { SentinelContext } from './Context';
9
+ import { SentinelReportStatus } from './State';
10
+ export const SentinelProvider = ({ account, archivist, children, name, witnesses = [], required = false, }) => {
11
+ const [sentinel, setSentinel] = useState();
12
+ const [history, setHistory] = useState();
13
+ const [progress, setProgress] = useState({});
14
+ const [status, setStatus] = useState(SentinelReportStatus.Idle);
15
+ const [reportingErrors, setReportingErrors] = useState();
16
+ const resolver = useMemo(() => {
17
+ const resolver = new CompositeModuleResolver().add(witnesses);
18
+ return archivist ? resolver.add(archivist) : resolver;
19
+ }, [archivist, witnesses]);
20
+ useAsyncEffect(
21
+ // eslint-disable-next-line react-hooks/exhaustive-deps
22
+ async (mounted) => {
23
+ const archivistWrapper = archivist ? new ArchivistWrapper(archivist) : undefined;
24
+ const sentinel = await AbstractSentinel.create({
25
+ account,
26
+ config: {
27
+ archivists: archivistWrapper ? [archivistWrapper?.address] : undefined,
28
+ name,
29
+ onReportEnd: (_, errors) => {
30
+ if (mounted()) {
31
+ setProgress({
32
+ archivists: progress.archivists,
33
+ witnesses: progress.witnesses,
34
+ });
35
+ setStatus(errors ? SentinelReportStatus.Failed : SentinelReportStatus.Succeeded);
36
+ setReportingErrors(errors);
37
+ }
38
+ },
39
+ onReportStart: () => {
40
+ if (mounted()) {
41
+ setProgress({ archivists: {}, witnesses: {} });
42
+ setStatus(SentinelReportStatus.Started);
43
+ }
44
+ },
45
+ onWitnessReportEnd: (witness, error) => {
46
+ const witnesses = progress.witnesses ?? {};
47
+ witnesses[witness.address] = {
48
+ status: error ? SentinelReportStatus.Failed : SentinelReportStatus.Succeeded,
49
+ witness,
50
+ };
51
+ if (mounted()) {
52
+ setProgress({
53
+ archivists: progress.archivists,
54
+ witnesses,
55
+ });
56
+ }
57
+ },
58
+ onWitnessReportStart: (witness) => {
59
+ const witnesses = progress.witnesses ?? {};
60
+ witnesses[witness.address] = {
61
+ status: SentinelReportStatus.Started,
62
+ witness,
63
+ };
64
+ if (mounted()) {
65
+ setProgress({
66
+ archivists: progress.archivists,
67
+ witnesses,
68
+ });
69
+ }
70
+ },
71
+ schema: SentinelConfigSchema,
72
+ witnesses: witnesses.map((witness) => witness.address),
73
+ },
74
+ resolver,
75
+ });
76
+ setSentinel(sentinel);
77
+ await delay(0);
78
+ },
79
+ // eslint-disable-next-line react-hooks/exhaustive-deps
80
+ [account, archivist, witnesses]);
81
+ useEffect(() => {
82
+ setHistory(sentinel?.history);
83
+ }, [sentinel]);
84
+ return !required || sentinel ? (_jsx(SentinelContext.Provider, { value: { history, progress, provided: true, reportingErrors, sentinel, status }, children: children })) : null;
85
+ };
86
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../src/contexts/Provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export var SentinelReportStatus;
2
+ (function (SentinelReportStatus) {
3
+ SentinelReportStatus["Idle"] = "idle";
4
+ SentinelReportStatus["Queued"] = "queued";
5
+ SentinelReportStatus["Started"] = "started";
6
+ SentinelReportStatus["Succeeded"] = "succeeded";
7
+ SentinelReportStatus["Failed"] = "failed";
8
+ })(SentinelReportStatus || (SentinelReportStatus = {}));
9
+ //# sourceMappingURL=State.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.js","sourceRoot":"","sources":["../../../src/contexts/State.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,oBAMX;AAND,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,+CAAuB,CAAA;IACvB,yCAAiB,CAAA;AACnB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,QAM/B"}
@@ -0,0 +1,5 @@
1
+ export * from './Context';
2
+ export * from './Provider';
3
+ export * from './State';
4
+ export * from './use';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { useContextEx } from '@xyo-network/react-shared';
2
+ import { SentinelContext } from './Context';
3
+ export const useSentinel = () => {
4
+ const { sentinel, history, progress, reportingErrors, status } = useContextEx(SentinelContext, 'XyoSentinel');
5
+ return { history, progress, reportingErrors, sentinel, status };
6
+ };
7
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;IAC7G,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AACjE,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './contexts';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { SentinelContextState } from './State';
3
+ export declare const SentinelContext: import("react").Context<SentinelContextState & import("@xyo-network/react-shared").ContextExState>;
4
+ //# sourceMappingURL=Context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../src/contexts/Context.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,eAAe,oGAA0C,CAAA"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import { WithChildren } from '@xylabs/react-shared';
3
+ import { Account } from '@xyo-network/account';
4
+ import { ArchivistModule } from '@xyo-network/archivist';
5
+ import { WitnessModule } from '@xyo-network/witness';
6
+ export interface SentinelProviderProps {
7
+ /** Account used by the sentinel for signing */
8
+ account?: Account;
9
+ /** @deprecated - sentinel no longer uses archive but relies on an archivist */
10
+ archive?: string;
11
+ archivist?: ArchivistModule;
12
+ name?: string;
13
+ required?: boolean;
14
+ witnesses?: WitnessModule[];
15
+ }
16
+ export declare const SentinelProvider: React.FC<WithChildren<SentinelProviderProps>>;
17
+ //# sourceMappingURL=Provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../src/contexts/Provider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAoB,MAAM,wBAAwB,CAAA;AAI1E,OAAO,EAAE,aAAa,EAAkB,MAAM,sBAAsB,CAAA;AAMpE,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAA;CAC5B;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAyF1E,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { ArchivistModule } from '@xyo-network/archivist';
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness-model';
3
+ import { SentinelModule } from '@xyo-network/sentinel';
4
+ import { WitnessWrapper } from '@xyo-network/witness';
5
+ export declare enum SentinelReportStatus {
6
+ Idle = "idle",
7
+ Queued = "queued",
8
+ Started = "started",
9
+ Succeeded = "succeeded",
10
+ Failed = "failed"
11
+ }
12
+ export interface SentinelWitnessReportProgress {
13
+ status: SentinelReportStatus;
14
+ witness: WitnessWrapper;
15
+ }
16
+ export interface SentinelArchivistApiReportProgress {
17
+ archivist: ArchivistModule;
18
+ status: SentinelReportStatus;
19
+ }
20
+ export interface SentinelReportProgress {
21
+ archivists?: Record<string, SentinelArchivistApiReportProgress>;
22
+ witnesses?: Record<string, SentinelWitnessReportProgress>;
23
+ }
24
+ export interface SentinelContextState {
25
+ history?: XyoBoundWitness[];
26
+ progress?: SentinelReportProgress;
27
+ reportingErrors?: Error[];
28
+ sentinel?: SentinelModule;
29
+ status?: SentinelReportStatus;
30
+ }
31
+ //# sourceMappingURL=State.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../src/contexts/State.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,oBAAY,oBAAoB;IAC9B,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,EAAE,cAAc,CAAA;CACxB;AAED,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAA;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAC3B,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,eAAe,CAAC,EAAE,KAAK,EAAE,CAAA;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B"}
@@ -0,0 +1,5 @@
1
+ export * from './Context';
2
+ export * from './Provider';
3
+ export * from './State';
4
+ export * from './use';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA"}
@@ -0,0 +1,30 @@
1
+ export declare const useSentinel: () => {
2
+ history: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").XyoBoundWitnessFields & {
3
+ schema: "network.xyo.boundwitness";
4
+ })[] | undefined;
5
+ progress: import("./State").SentinelReportProgress | undefined;
6
+ reportingErrors: Error[] | undefined;
7
+ sentinel: import("@xyo-network/sentinel").SentinelModule<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
8
+ name?: string | undefined;
9
+ security?: {
10
+ allowAnonymous?: boolean | undefined;
11
+ allowed?: Record<string, (string | import("@xyo-network/module-model").CosigningAddressSet)[]> | undefined;
12
+ disallowed?: Record<string, string[]> | undefined;
13
+ } | undefined;
14
+ } & {
15
+ archivists?: string[] | undefined;
16
+ schema: string;
17
+ } & {
18
+ onReportEnd?: ((boundWitness?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/boundwitness-model").XyoBoundWitnessFields & {
19
+ schema: "network.xyo.boundwitness";
20
+ }) | undefined, errors?: Error[] | undefined) => void) | undefined;
21
+ onReportStart?: (() => void) | undefined;
22
+ onWitnessReportEnd?: ((witness: import("@xyo-network/witness").WitnessModule, error?: Error | undefined) => void) | undefined;
23
+ onWitnessReportStart?: ((witness: import("@xyo-network/witness").WitnessModule) => void) | undefined;
24
+ witnesses?: string[] | undefined;
25
+ } & {
26
+ schema: string;
27
+ }> | undefined;
28
+ status: import("./State").SentinelReportStatus | undefined;
29
+ };
30
+ //# sourceMappingURL=use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../src/contexts/use.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGvB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './contexts';
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,YAAY,CAAA"}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "@xyo-network/react-sentinel",
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/delay": "^2.7.1",
14
+ "@xylabs/react-shared": "^2.16.8",
15
+ "@xyo-network/account": "^2.47.0",
16
+ "@xyo-network/archivist": "^2.47.0",
17
+ "@xyo-network/boundwitness-model": "^2.47.0",
18
+ "@xyo-network/module": "^2.47.0",
19
+ "@xyo-network/react-shared": "^2.42.6",
20
+ "@xyo-network/sentinel": "^2.47.0",
21
+ "@xyo-network/witness": "^2.47.0"
22
+ },
23
+ "devDependencies": {
24
+ "@xylabs/ts-scripts-yarn3": "^2.14.15",
25
+ "@xylabs/tsconfig-react": "^2.14.15",
26
+ "typescript": "^4.9.5"
27
+ },
28
+ "peerDependencies": {
29
+ "@mui/icons-material": "^5",
30
+ "@mui/material": "^5",
31
+ "@mui/styles": "^5",
32
+ "axios": "^1",
33
+ "react": "^18",
34
+ "react-dom": "^18",
35
+ "react-router-dom": "^6"
36
+ },
37
+ "description": "Common React library for all XYO projects that use React",
38
+ "browser": "dist/esm/index.js",
39
+ "docs": "dist/docs.json",
40
+ "exports": {
41
+ ".": {
42
+ "node": {
43
+ "import": "./dist/esm/index.js",
44
+ "require": "./dist/cjs/index.js"
45
+ },
46
+ "browser": {
47
+ "import": "./dist/esm/index.js",
48
+ "require": "./dist/cjs/index.js"
49
+ },
50
+ "default": "./dist/esm/index.js"
51
+ },
52
+ "./dist/docs.json": {
53
+ "default": "./dist/docs.json"
54
+ },
55
+ "./package.json": "./package.json"
56
+ },
57
+ "main": "dist/cjs/index.js",
58
+ "module": "dist/esm/index.js",
59
+ "homepage": "https://xyo.network",
60
+ "keywords": [
61
+ "xyo",
62
+ "utility",
63
+ "typescript",
64
+ "react"
65
+ ],
66
+ "license": "LGPL-3.0",
67
+ "publishConfig": {
68
+ "access": "public"
69
+ },
70
+ "repository": {
71
+ "type": "git",
72
+ "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js.git"
73
+ },
74
+ "scripts": {
75
+ "lint-pkg": "npmPkgJsonLint .",
76
+ "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\""
77
+ },
78
+ "sideEffects": false,
79
+ "types": "dist/types/index.d.ts",
80
+ "version": "2.42.4"
81
+ }
@@ -0,0 +1,5 @@
1
+ import { createContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { SentinelContextState } from './State'
4
+
5
+ export const SentinelContext = createContextEx<SentinelContextState>()
@@ -0,0 +1,114 @@
1
+ import { delay } from '@xylabs/delay'
2
+ import { useAsyncEffect, WithChildren } from '@xylabs/react-shared'
3
+ import { Account } from '@xyo-network/account'
4
+ import { ArchivistModule, ArchivistWrapper } from '@xyo-network/archivist'
5
+ import { XyoBoundWitness } from '@xyo-network/boundwitness-model'
6
+ import { CompositeModuleResolver } from '@xyo-network/module'
7
+ import { AbstractSentinel, SentinelConfig, SentinelConfigSchema } from '@xyo-network/sentinel'
8
+ import { WitnessModule, WitnessWrapper } from '@xyo-network/witness'
9
+ import { useEffect, useMemo, useState } from 'react'
10
+
11
+ import { SentinelContext } from './Context'
12
+ import { SentinelReportProgress, SentinelReportStatus } from './State'
13
+
14
+ export interface SentinelProviderProps {
15
+ /** Account used by the sentinel for signing */
16
+ account?: Account
17
+ /** @deprecated - sentinel no longer uses archive but relies on an archivist */
18
+ archive?: string
19
+ archivist?: ArchivistModule
20
+ name?: string
21
+ required?: boolean
22
+ witnesses?: WitnessModule[]
23
+ }
24
+
25
+ export const SentinelProvider: React.FC<WithChildren<SentinelProviderProps>> = ({
26
+ account,
27
+ archivist,
28
+ children,
29
+ name,
30
+ witnesses = [],
31
+ required = false,
32
+ }) => {
33
+ const [sentinel, setSentinel] = useState<AbstractSentinel>()
34
+ const [history, setHistory] = useState<XyoBoundWitness[]>()
35
+ const [progress, setProgress] = useState<SentinelReportProgress>({})
36
+ const [status, setStatus] = useState(SentinelReportStatus.Idle)
37
+ const [reportingErrors, setReportingErrors] = useState<Error[]>()
38
+
39
+ const resolver = useMemo(() => {
40
+ const resolver = new CompositeModuleResolver().add(witnesses)
41
+ return archivist ? resolver.add(archivist) : resolver
42
+ }, [archivist, witnesses])
43
+
44
+ useAsyncEffect(
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ async (mounted) => {
47
+ const archivistWrapper = archivist ? new ArchivistWrapper(archivist) : undefined
48
+ const sentinel = await AbstractSentinel.create({
49
+ account,
50
+ config: {
51
+ archivists: archivistWrapper ? [archivistWrapper?.address] : undefined,
52
+ name,
53
+ onReportEnd: (_, errors?: Error[]) => {
54
+ if (mounted()) {
55
+ setProgress({
56
+ archivists: progress.archivists,
57
+ witnesses: progress.witnesses,
58
+ })
59
+ setStatus(errors ? SentinelReportStatus.Failed : SentinelReportStatus.Succeeded)
60
+ setReportingErrors(errors)
61
+ }
62
+ },
63
+ onReportStart: () => {
64
+ if (mounted()) {
65
+ setProgress({ archivists: {}, witnesses: {} })
66
+ setStatus(SentinelReportStatus.Started)
67
+ }
68
+ },
69
+ onWitnessReportEnd: (witness: WitnessWrapper, error?: Error) => {
70
+ const witnesses = progress.witnesses ?? {}
71
+ witnesses[witness.address] = {
72
+ status: error ? SentinelReportStatus.Failed : SentinelReportStatus.Succeeded,
73
+ witness,
74
+ }
75
+ if (mounted()) {
76
+ setProgress({
77
+ archivists: progress.archivists,
78
+ witnesses,
79
+ })
80
+ }
81
+ },
82
+ onWitnessReportStart: (witness: WitnessWrapper) => {
83
+ const witnesses = progress.witnesses ?? {}
84
+ witnesses[witness.address] = {
85
+ status: SentinelReportStatus.Started,
86
+ witness,
87
+ }
88
+ if (mounted()) {
89
+ setProgress({
90
+ archivists: progress.archivists,
91
+ witnesses,
92
+ })
93
+ }
94
+ },
95
+ schema: SentinelConfigSchema,
96
+ witnesses: witnesses.map((witness) => witness.address),
97
+ } as SentinelConfig,
98
+ resolver,
99
+ })
100
+ setSentinel(sentinel)
101
+ await delay(0)
102
+ },
103
+ // eslint-disable-next-line react-hooks/exhaustive-deps
104
+ [account, archivist, witnesses],
105
+ )
106
+
107
+ useEffect(() => {
108
+ setHistory(sentinel?.history as XyoBoundWitness[])
109
+ }, [sentinel])
110
+
111
+ return !required || sentinel ? (
112
+ <SentinelContext.Provider value={{ history, progress, provided: true, reportingErrors, sentinel, status }}>{children}</SentinelContext.Provider>
113
+ ) : null
114
+ }
@@ -0,0 +1,35 @@
1
+ import { ArchivistModule } from '@xyo-network/archivist'
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness-model'
3
+ import { SentinelModule } from '@xyo-network/sentinel'
4
+ import { WitnessWrapper } from '@xyo-network/witness'
5
+
6
+ export enum SentinelReportStatus {
7
+ Idle = 'idle',
8
+ Queued = 'queued',
9
+ Started = 'started',
10
+ Succeeded = 'succeeded',
11
+ Failed = 'failed',
12
+ }
13
+
14
+ export interface SentinelWitnessReportProgress {
15
+ status: SentinelReportStatus
16
+ witness: WitnessWrapper
17
+ }
18
+
19
+ export interface SentinelArchivistApiReportProgress {
20
+ archivist: ArchivistModule
21
+ status: SentinelReportStatus
22
+ }
23
+
24
+ export interface SentinelReportProgress {
25
+ archivists?: Record<string, SentinelArchivistApiReportProgress>
26
+ witnesses?: Record<string, SentinelWitnessReportProgress>
27
+ }
28
+
29
+ export interface SentinelContextState {
30
+ history?: XyoBoundWitness[]
31
+ progress?: SentinelReportProgress
32
+ reportingErrors?: Error[]
33
+ sentinel?: SentinelModule
34
+ status?: SentinelReportStatus
35
+ }
@@ -0,0 +1,4 @@
1
+ export * from './Context'
2
+ export * from './Provider'
3
+ export * from './State'
4
+ export * from './use'
@@ -0,0 +1,8 @@
1
+ import { useContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { SentinelContext } from './Context'
4
+
5
+ export const useSentinel = () => {
6
+ const { sentinel, history, progress, reportingErrors, status } = useContextEx(SentinelContext, 'XyoSentinel')
7
+ return { history, progress, reportingErrors, sentinel, status }
8
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './contexts'