@xyo-network/react-sentinel 5.3.0 → 5.3.1

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.
@@ -74,7 +74,7 @@ var SentinelCard = /* @__PURE__ */ __name(({ children, inPayloads, mod, ...props
74
74
  }, "SentinelCard");
75
75
 
76
76
  // src/contexts/Context.ts
77
- import { createContextEx } from "@xyo-network/react-shared";
77
+ import { createContextEx } from "@xylabs/react-shared";
78
78
  var SentinelContext = createContextEx();
79
79
 
80
80
  // src/contexts/Provider.tsx
@@ -202,7 +202,7 @@ var SentinelProvider = /* @__PURE__ */ __name(({ account, archivist, children, i
202
202
  }, "SentinelProvider");
203
203
 
204
204
  // src/contexts/use.ts
205
- import { useContextEx } from "@xyo-network/react-shared";
205
+ import { useContextEx } from "@xylabs/react-shared";
206
206
  var useSentinelContext = /* @__PURE__ */ __name(() => {
207
207
  const { sentinel, history, progress, reportingErrors, status } = useContextEx(SentinelContext, "Sentinel");
208
208
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/Card/Card.tsx","../../src/components/Card/CardActions.tsx","../../src/components/Card/CardContent.tsx","../../src/components/Card/CardHeader.tsx","../../src/contexts/Context.ts","../../src/contexts/Provider.tsx","../../src/contexts/State.ts","../../src/contexts/use.ts","../../src/hooks/node/useSentinelFromNode.tsx","../../src/hooks/node/useSentinelsFromNode.tsx","../../src/hooks/node/useWeakSentinelFromNode.tsx","../../src/hooks/node/useWeakSentinelsFromNode.tsx"],"sourcesContent":["import type { CardProps } from '@mui/material'\nimport { Card } from '@mui/material'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React, { useState } from 'react'\n\nimport { SentinelCardActions } from './CardActions.tsx'\nimport { SentinelCardContent } from './CardContent.tsx'\nimport { SentinelCardHeader } from './CardHeader.tsx'\n\nexport type SentinelCardProps = CardProps &\n ModuleRenderProps<SentinelInstance> & {\n inPayloads?: Payload[]\n }\n\nexport const SentinelCard: React.FC<SentinelCardProps> = ({\n children, inPayloads, mod, ...props\n}) => {\n const [retry, setRetry] = useState(-1)\n const [report] = usePromise(async () => {\n if (retry >= 0) {\n return await mod?.report(inPayloads)\n }\n }, [mod, retry, inPayloads])\n return (\n <Card {...props}>\n <SentinelCardHeader mod={mod} />\n <SentinelCardContent mod={mod} report={report} />\n {children}\n <SentinelCardActions mod={mod} onReport={() => setRetry(retry + 1)} />\n </Card>\n )\n}\n","import type { CardActionsProps } from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport { ModuleCardActions } from '@xyo-network/react-module'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React from 'react'\n\nexport type SentinelCardActionsProps = ModuleRenderProps<SentinelInstance> &\n CardActionsProps & {\n onReport?: (mod?: SentinelInstance) => void\n }\n\nexport const SentinelCardActions: React.FC<SentinelCardActionsProps> = ({\n onReport, mod, ...props\n}) => {\n return (\n <ModuleCardActions mod={mod} {...props}>\n <ButtonEx onClick={() => onReport?.(mod)} size=\"small\" variant=\"outlined\">\n Report\n </ButtonEx>\n </ModuleCardActions>\n )\n}\n","import type { CardContentProps } from '@mui/material'\nimport { FlexGrowRow } from '@xylabs/react-flexbox'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport { ModuleCardContent } from '@xyo-network/react-module'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React from 'react'\n\nexport type SentinelCardContentProps = ModuleRenderProps<SentinelInstance> &\n CardContentProps & {\n report?: Payload[]\n }\n\nexport const SentinelCardContent: React.FC<SentinelCardContentProps> = ({\n children, report, mod, ...props\n}) => {\n return (\n <ModuleCardContent mod={mod} {...props}>\n <FlexGrowRow flexWrap=\"wrap\" justifyContent=\"start\" gap={2}>\n {report\n ? <JsonViewerEx value={report} />\n : null}\n {children}\n </FlexGrowRow>\n </ModuleCardContent>\n )\n}\n","import type { CardHeaderProps } from '@mui/material'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport { ModuleCardHeader } from '@xyo-network/react-module'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React from 'react'\n\nexport const SentinelCardHeader: React.FC<ModuleRenderProps<SentinelInstance> & CardHeaderProps> = ({\n title, mod, ...props\n}) => {\n return <ModuleCardHeader mod={mod} title={title ?? mod?.config.name ?? 'Sentinel'} {...props} />\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { SentinelContextState } from './State.ts'\n\nexport const SentinelContext = createContextEx<SentinelContextState>()\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { useWitnessesFromNode } from '@xyo-network/react-witness'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type { SentinelConfig } from '@xyo-network/sentinel-model'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\nimport type { WitnessInstance } from '@xyo-network/witness-model'\nimport { asWitnessInstance } from '@xyo-network/witness-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { SentinelContext } from './Context.ts'\nimport type { SentinelReportProgress } from './State.ts'\nimport { SentinelReportStatus } from './State.ts'\n\nexport interface SentinelProviderProps {\n /** Account used by the sentinel for signing */\n account: AccountInstance\n /** @deprecated - sentinel no longer uses archive but relies on an archivist */\n archive?: string\n archivist?: string\n ids?: ModuleIdentifier[]\n name?: string\n required?: boolean\n witnesses?: WitnessInstance[]\n}\n\nexport const SentinelProvider: React.FC<PropsWithChildren<SentinelProviderProps>> = ({\n account, archivist, children, ids, name, required = false,\n}) => {\n const [sentinel, setSentinel] = useState<MemorySentinel>()\n const [history, setHistory] = useState<BoundWitness[]>()\n const [progress, setProgress] = useState<SentinelReportProgress>({})\n const [status, setStatus] = useState<SentinelReportStatus>(SentinelReportStatus.Idle)\n const [reportingErrors, setReportingErrors] = useState<Error[]>()\n const [witnesses] = useWitnessesFromNode(ids)\n\n useAsyncEffect(\n\n async (mounted) => {\n const sentinel = await MemorySentinel.create({\n account,\n config: {\n archivists: archivist ? [archivist] : undefined,\n name,\n\n schema: SentinelConfigSchema,\n synchronous: true,\n\n tasks: witnesses?.map(mod => ({ mod: mod.address })),\n } as SentinelConfig,\n })\n const offCallbacks: (() => void)[] = []\n offCallbacks.push(\n sentinel.on('reportEnd', ({ mod, outPayloads }) => {\n if (mounted()) {\n setProgress({\n archivists: progress.archivists,\n witnesses: progress.witnesses,\n })\n setStatus(outPayloads?.length ? SentinelReportStatus.Succeeded : SentinelReportStatus.Failed)\n setReportingErrors([new Error(`Witness failed [${mod?.config?.name ?? mod.address}]`)])\n }\n }),\n sentinel.on('reportStart', () => {\n if (mounted()) {\n setProgress({ archivists: {}, witnesses: {} })\n setStatus(SentinelReportStatus.Started)\n }\n }),\n )\n if (witnesses)\n for (const witness of witnesses) {\n offCallbacks.push(\n witness.on('observeEnd', ({ mod, outPayloads }) => {\n const witnesses = progress.witnesses ?? {}\n witnesses[witness.address] = {\n status: outPayloads?.length ? SentinelReportStatus.Succeeded : SentinelReportStatus.Failed,\n witness: asWitnessInstance(mod, () => `Module is not a witness [${mod.id}]`),\n }\n if (mounted()) {\n setProgress({\n archivists: progress.archivists,\n witnesses,\n })\n }\n }),\n witness.on('observeStart', ({ mod }) => {\n const witnesses = progress.witnesses ?? {}\n witnesses[witness.address] = {\n status: SentinelReportStatus.Started,\n witness: asWitnessInstance(mod, () => `Module is not a witness [${mod.id}]`),\n }\n if (mounted()) {\n setProgress({\n archivists: progress.archivists,\n witnesses,\n })\n }\n }),\n )\n }\n setSentinel(sentinel as MemorySentinel)\n return () => {\n // unsubscribe from events\n for (const callback of offCallbacks) {\n callback()\n }\n }\n },\n\n [account, archivist, witnesses],\n )\n\n useEffect(() => {\n // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n setHistory(sentinel?.history as BoundWitness[])\n }, [sentinel])\n\n const value = useMemo(() => ({\n history, progress, provided: true, reportingErrors, sentinel, status,\n }), [history, progress, reportingErrors, sentinel, status])\n\n return !required || sentinel\n\n ? (\n <SentinelContext value={value}>\n {children}\n </SentinelContext>\n )\n : null\n}\n","import type { EnumValue } from '@xylabs/enum'\nimport { Enum } from '@xylabs/enum'\nimport type { ArchivistModuleInstance } from '@xyo-network/archivist-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type { SentinelModule } from '@xyo-network/sentinel-model'\nimport type { WitnessModule } from '@xyo-network/witness-model'\n\nexport const SentinelReportStatus = Enum({\n Idle: 'idle',\n Queued: 'queued',\n Started: 'started',\n Succeeded: 'succeeded',\n Failed: 'failed',\n})\n\nexport type SentinelReportStatus = EnumValue<typeof SentinelReportStatus>\n\nexport interface SentinelWitnessReportProgress {\n status: SentinelReportStatus\n witness: WitnessModule\n}\n\nexport interface SentinelArchivistApiReportProgress {\n archivist: ArchivistModuleInstance\n status: SentinelReportStatus\n}\n\nexport interface SentinelReportProgress {\n archivists?: Record<string, SentinelArchivistApiReportProgress>\n witnesses?: Record<string, SentinelWitnessReportProgress>\n}\n\nexport interface SentinelContextState {\n history?: BoundWitness[]\n progress?: SentinelReportProgress\n reportingErrors?: Error[]\n sentinel?: SentinelModule\n status?: SentinelReportStatus\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { SentinelContext } from './Context.ts'\n\nexport const useSentinelContext = () => {\n const {\n sentinel, history, progress, reportingErrors, status,\n } = useContextEx(SentinelContext, 'Sentinel')\n return {\n history, progress, reportingErrors, sentinel, status,\n }\n}\n","import type { ModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useModuleFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useSentinelFromNode = (\n nameOrAddressOrInstance?: string | SentinelInstance,\n config?: ModuleFromNodeConfig,\n): [SentinelInstance | undefined, Error | undefined] => {\n const [mod, error] = useModuleFromNode(nameOrAddressOrInstance, config)\n const instance = asSentinelInstance(mod)\n if (mod && !instance) {\n const error = new Error(`Resolved module is not a SentinelInstance [${mod.config?.schema}:${mod.config?.name}:${mod.address}]`)\n console.error(error.message)\n return [undefined, error]\n }\n return [instance, error]\n}\n","import type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { ModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useModulesFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useSentinelsFromNode = (\n ids?: ModuleIdentifier[],\n config?: ModuleFromNodeConfig,\n): [SentinelInstance[] | null | undefined, Error | undefined] => {\n const [modules, error] = useModulesFromNode(ids, config)\n if (error) {\n return [null, error]\n }\n return modules\n ? [\n // eslint-disable-next-line unicorn/no-array-reduce\n modules.reduce<SentinelInstance[]>((prev, mod) => {\n if (isSentinelInstance(mod)) {\n prev.push(mod)\n }\n return prev\n }, []),\n undefined,\n ]\n : [modules, error]\n}\n","import type { WeakModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useWeakSentinelFromNode = (\n nameOrAddressOrInstance?: string | SentinelInstance,\n config?: WeakModuleFromNodeConfig,\n): [WeakRef<SentinelInstance> | undefined, Error | undefined] => {\n return useWeakModuleFromNode<SentinelInstance>(nameOrAddressOrInstance, { identity: isSentinelInstance, ...config })\n}\n","import { exists } from '@xylabs/exists'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { ModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useWeakModulesFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useWeakSentinelsFromNode = (\n ids?: ModuleIdentifier[],\n config?: ModuleFromNodeConfig,\n): [WeakRef<SentinelInstance>[] | null | undefined, Error | undefined] => {\n const [modules, error] = useWeakModulesFromNode(ids, config)\n if (error) {\n return [null, error]\n }\n return [\n modules\n ?.map((mod) => {\n const instance = asSentinelInstance(mod?.deref())\n if (instance) {\n return new WeakRef(instance)\n }\n })\n .filter(exists) ?? [],\n undefined,\n ]\n}\n"],"mappings":"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","names":["Card","usePromise","React","useState","ButtonEx","ModuleCardActions","React","SentinelCardActions","onReport","mod","props","ModuleCardActions","ButtonEx","onClick","size","variant","FlexGrowRow","ModuleCardContent","JsonViewerEx","React","SentinelCardContent","children","report","mod","props","React","ModuleCardContent","FlexGrowRow","flexWrap","justifyContent","gap","JsonViewerEx","value","ModuleCardHeader","React","SentinelCardHeader","title","mod","props","React","ModuleCardHeader","config","name","SentinelCard","children","inPayloads","mod","props","retry","setRetry","useState","report","usePromise","React","Card","SentinelCardHeader","SentinelCardContent","SentinelCardActions","onReport","createContextEx","SentinelContext","useAsyncEffect","useWitnessesFromNode","MemorySentinel","SentinelConfigSchema","asWitnessInstance","React","useEffect","useMemo","useState","Enum","SentinelReportStatus","Idle","Queued","Started","Succeeded","Failed","SentinelProvider","account","archivist","children","ids","name","required","sentinel","setSentinel","useState","history","setHistory","progress","setProgress","status","setStatus","SentinelReportStatus","Idle","reportingErrors","setReportingErrors","witnesses","useWitnessesFromNode","useAsyncEffect","mounted","MemorySentinel","create","config","archivists","undefined","schema","SentinelConfigSchema","synchronous","tasks","map","mod","address","offCallbacks","push","on","outPayloads","length","Succeeded","Failed","Error","Started","witness","asWitnessInstance","id","callback","useEffect","value","useMemo","provided","React","SentinelContext","useContextEx","useSentinelContext","sentinel","history","progress","reportingErrors","status","useContextEx","SentinelContext","useModuleFromNode","asSentinelInstance","useSentinelFromNode","nameOrAddressOrInstance","config","mod","error","useModuleFromNode","instance","asSentinelInstance","Error","schema","name","address","console","message","undefined","useModulesFromNode","isSentinelInstance","useSentinelsFromNode","ids","config","modules","error","useModulesFromNode","reduce","prev","mod","isSentinelInstance","push","undefined","useWeakModuleFromNode","isSentinelInstance","useWeakSentinelFromNode","nameOrAddressOrInstance","config","useWeakModuleFromNode","identity","isSentinelInstance","exists","useWeakModulesFromNode","asSentinelInstance","useWeakSentinelsFromNode","ids","config","modules","error","useWeakModulesFromNode","map","mod","instance","asSentinelInstance","deref","WeakRef","filter","exists","undefined"]}
1
+ {"version":3,"sources":["../../src/components/Card/Card.tsx","../../src/components/Card/CardActions.tsx","../../src/components/Card/CardContent.tsx","../../src/components/Card/CardHeader.tsx","../../src/contexts/Context.ts","../../src/contexts/Provider.tsx","../../src/contexts/State.ts","../../src/contexts/use.ts","../../src/hooks/node/useSentinelFromNode.tsx","../../src/hooks/node/useSentinelsFromNode.tsx","../../src/hooks/node/useWeakSentinelFromNode.tsx","../../src/hooks/node/useWeakSentinelsFromNode.tsx"],"sourcesContent":["import type { CardProps } from '@mui/material'\nimport { Card } from '@mui/material'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React, { useState } from 'react'\n\nimport { SentinelCardActions } from './CardActions.tsx'\nimport { SentinelCardContent } from './CardContent.tsx'\nimport { SentinelCardHeader } from './CardHeader.tsx'\n\nexport type SentinelCardProps = CardProps &\n ModuleRenderProps<SentinelInstance> & {\n inPayloads?: Payload[]\n }\n\nexport const SentinelCard: React.FC<SentinelCardProps> = ({\n children, inPayloads, mod, ...props\n}) => {\n const [retry, setRetry] = useState(-1)\n const [report] = usePromise(async () => {\n if (retry >= 0) {\n return await mod?.report(inPayloads)\n }\n }, [mod, retry, inPayloads])\n return (\n <Card {...props}>\n <SentinelCardHeader mod={mod} />\n <SentinelCardContent mod={mod} report={report} />\n {children}\n <SentinelCardActions mod={mod} onReport={() => setRetry(retry + 1)} />\n </Card>\n )\n}\n","import type { CardActionsProps } from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport { ModuleCardActions } from '@xyo-network/react-module'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React from 'react'\n\nexport type SentinelCardActionsProps = ModuleRenderProps<SentinelInstance> &\n CardActionsProps & {\n onReport?: (mod?: SentinelInstance) => void\n }\n\nexport const SentinelCardActions: React.FC<SentinelCardActionsProps> = ({\n onReport, mod, ...props\n}) => {\n return (\n <ModuleCardActions mod={mod} {...props}>\n <ButtonEx onClick={() => onReport?.(mod)} size=\"small\" variant=\"outlined\">\n Report\n </ButtonEx>\n </ModuleCardActions>\n )\n}\n","import type { CardContentProps } from '@mui/material'\nimport { FlexGrowRow } from '@xylabs/react-flexbox'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport { ModuleCardContent } from '@xyo-network/react-module'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React from 'react'\n\nexport type SentinelCardContentProps = ModuleRenderProps<SentinelInstance> &\n CardContentProps & {\n report?: Payload[]\n }\n\nexport const SentinelCardContent: React.FC<SentinelCardContentProps> = ({\n children, report, mod, ...props\n}) => {\n return (\n <ModuleCardContent mod={mod} {...props}>\n <FlexGrowRow flexWrap=\"wrap\" justifyContent=\"start\" gap={2}>\n {report\n ? <JsonViewerEx value={report} />\n : null}\n {children}\n </FlexGrowRow>\n </ModuleCardContent>\n )\n}\n","import type { CardHeaderProps } from '@mui/material'\nimport type { ModuleRenderProps } from '@xyo-network/react-module'\nimport { ModuleCardHeader } from '@xyo-network/react-module'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport React from 'react'\n\nexport const SentinelCardHeader: React.FC<ModuleRenderProps<SentinelInstance> & CardHeaderProps> = ({\n title, mod, ...props\n}) => {\n return <ModuleCardHeader mod={mod} title={title ?? mod?.config.name ?? 'Sentinel'} {...props} />\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { SentinelContextState } from './State.ts'\n\nexport const SentinelContext = createContextEx<SentinelContextState>()\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { useWitnessesFromNode } from '@xyo-network/react-witness'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type { SentinelConfig } from '@xyo-network/sentinel-model'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\nimport type { WitnessInstance } from '@xyo-network/witness-model'\nimport { asWitnessInstance } from '@xyo-network/witness-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { SentinelContext } from './Context.ts'\nimport type { SentinelContextState, SentinelReportProgress } from './State.ts'\nimport { SentinelReportStatus } from './State.ts'\n\nexport interface SentinelProviderProps {\n /** Account used by the sentinel for signing */\n account: AccountInstance\n /** @deprecated - sentinel no longer uses archive but relies on an archivist */\n archive?: string\n archivist?: string\n ids?: ModuleIdentifier[]\n name?: string\n required?: boolean\n witnesses?: WitnessInstance[]\n}\n\nexport const SentinelProvider: React.FC<PropsWithChildren<SentinelProviderProps>> = ({\n account, archivist, children, ids, name, required = false,\n}) => {\n const [sentinel, setSentinel] = useState<MemorySentinel>()\n const [history, setHistory] = useState<BoundWitness[]>()\n const [progress, setProgress] = useState<SentinelReportProgress>({})\n const [status, setStatus] = useState<SentinelReportStatus>(SentinelReportStatus.Idle)\n const [reportingErrors, setReportingErrors] = useState<Error[]>()\n const [witnesses] = useWitnessesFromNode(ids)\n\n useAsyncEffect(\n\n async (mounted) => {\n const sentinel = await MemorySentinel.create({\n account,\n config: {\n archivists: archivist ? [archivist] : undefined,\n name,\n\n schema: SentinelConfigSchema,\n synchronous: true,\n\n tasks: witnesses?.map(mod => ({ mod: mod.address })),\n } as SentinelConfig,\n })\n const offCallbacks: (() => void)[] = []\n offCallbacks.push(\n sentinel.on('reportEnd', ({ mod, outPayloads }) => {\n if (mounted()) {\n setProgress({\n archivists: progress.archivists,\n witnesses: progress.witnesses,\n })\n setStatus(outPayloads?.length ? SentinelReportStatus.Succeeded : SentinelReportStatus.Failed)\n setReportingErrors([new Error(`Witness failed [${mod?.config?.name ?? mod.address}]`)])\n }\n }),\n sentinel.on('reportStart', () => {\n if (mounted()) {\n setProgress({ archivists: {}, witnesses: {} })\n setStatus(SentinelReportStatus.Started)\n }\n }),\n )\n if (witnesses)\n for (const witness of witnesses) {\n offCallbacks.push(\n witness.on('observeEnd', ({ mod, outPayloads }) => {\n const witnesses = progress.witnesses ?? {}\n witnesses[witness.address] = {\n status: outPayloads?.length ? SentinelReportStatus.Succeeded : SentinelReportStatus.Failed,\n witness: asWitnessInstance(mod, () => `Module is not a witness [${mod.id}]`),\n }\n if (mounted()) {\n setProgress({\n archivists: progress.archivists,\n witnesses,\n })\n }\n }),\n witness.on('observeStart', ({ mod }) => {\n const witnesses = progress.witnesses ?? {}\n witnesses[witness.address] = {\n status: SentinelReportStatus.Started,\n witness: asWitnessInstance(mod, () => `Module is not a witness [${mod.id}]`),\n }\n if (mounted()) {\n setProgress({\n archivists: progress.archivists,\n witnesses,\n })\n }\n }),\n )\n }\n setSentinel(sentinel as MemorySentinel)\n return () => {\n // unsubscribe from events\n for (const callback of offCallbacks) {\n callback()\n }\n }\n },\n\n [account, archivist, witnesses],\n )\n\n useEffect(() => {\n // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n setHistory(sentinel?.history as BoundWitness[])\n }, [sentinel])\n\n const value: SentinelContextState = useMemo(() => ({\n history, progress, provided: true, reportingErrors, sentinel, status,\n }), [history, progress, reportingErrors, sentinel, status])\n\n return !required || sentinel\n\n ? (\n <SentinelContext value={value}>\n {children}\n </SentinelContext>\n )\n : null\n}\n","import type { EnumValue } from '@xylabs/enum'\nimport { Enum } from '@xylabs/enum'\nimport type { ContextExState } from '@xylabs/react-shared'\nimport type { ArchivistModuleInstance } from '@xyo-network/archivist-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type { SentinelModule } from '@xyo-network/sentinel-model'\nimport type { WitnessModule } from '@xyo-network/witness-model'\n\nexport const SentinelReportStatus = Enum({\n Idle: 'idle',\n Queued: 'queued',\n Started: 'started',\n Succeeded: 'succeeded',\n Failed: 'failed',\n})\n\nexport type SentinelReportStatus = EnumValue<typeof SentinelReportStatus>\n\nexport interface SentinelWitnessReportProgress {\n status: SentinelReportStatus\n witness: WitnessModule\n}\n\nexport interface SentinelArchivistApiReportProgress {\n archivist: ArchivistModuleInstance\n status: SentinelReportStatus\n}\n\nexport interface SentinelReportProgress {\n archivists?: Record<string, SentinelArchivistApiReportProgress>\n witnesses?: Record<string, SentinelWitnessReportProgress>\n}\n\nexport type SentinelContextState = ContextExState<{\n history?: BoundWitness[]\n progress?: SentinelReportProgress\n reportingErrors?: Error[]\n sentinel?: SentinelModule\n status?: SentinelReportStatus\n}>\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { SentinelContext } from './Context.ts'\n\nexport const useSentinelContext = () => {\n const {\n sentinel, history, progress, reportingErrors, status,\n } = useContextEx(SentinelContext, 'Sentinel')\n return {\n history, progress, reportingErrors, sentinel, status,\n }\n}\n","import type { ModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useModuleFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useSentinelFromNode = (\n nameOrAddressOrInstance?: string | SentinelInstance,\n config?: ModuleFromNodeConfig,\n): [SentinelInstance | undefined, Error | undefined] => {\n const [mod, error] = useModuleFromNode(nameOrAddressOrInstance, config)\n const instance = asSentinelInstance(mod)\n if (mod && !instance) {\n const error = new Error(`Resolved module is not a SentinelInstance [${mod.config?.schema}:${mod.config?.name}:${mod.address}]`)\n console.error(error.message)\n return [undefined, error]\n }\n return [instance, error]\n}\n","import type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { ModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useModulesFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useSentinelsFromNode = (\n ids?: ModuleIdentifier[],\n config?: ModuleFromNodeConfig,\n): [SentinelInstance[] | null | undefined, Error | undefined] => {\n const [modules, error] = useModulesFromNode(ids, config)\n if (error) {\n return [null, error]\n }\n return modules\n ? [\n // eslint-disable-next-line unicorn/no-array-reduce\n modules.reduce<SentinelInstance[]>((prev, mod) => {\n if (isSentinelInstance(mod)) {\n prev.push(mod)\n }\n return prev\n }, []),\n undefined,\n ]\n : [modules, error]\n}\n","import type { WeakModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useWeakSentinelFromNode = (\n nameOrAddressOrInstance?: string | SentinelInstance,\n config?: WeakModuleFromNodeConfig,\n): [WeakRef<SentinelInstance> | undefined, Error | undefined] => {\n return useWeakModuleFromNode<SentinelInstance>(nameOrAddressOrInstance, { identity: isSentinelInstance, ...config })\n}\n","import { exists } from '@xylabs/exists'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport type { ModuleFromNodeConfig } from '@xyo-network/react-node'\nimport { useWeakModulesFromNode } from '@xyo-network/react-node'\nimport type { SentinelInstance } from '@xyo-network/sentinel-model'\nimport { asSentinelInstance } from '@xyo-network/sentinel-model'\n\nexport const useWeakSentinelsFromNode = (\n ids?: ModuleIdentifier[],\n config?: ModuleFromNodeConfig,\n): [WeakRef<SentinelInstance>[] | null | undefined, Error | undefined] => {\n const [modules, error] = useWeakModulesFromNode(ids, config)\n if (error) {\n return [null, error]\n }\n return [\n modules\n ?.map((mod) => {\n const instance = asSentinelInstance(mod?.deref())\n if (instance) {\n return new WeakRef(instance)\n }\n })\n .filter(exists) ?? [],\n undefined,\n ]\n}\n"],"mappings":"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","names":["Card","usePromise","React","useState","ButtonEx","ModuleCardActions","React","SentinelCardActions","onReport","mod","props","ModuleCardActions","ButtonEx","onClick","size","variant","FlexGrowRow","ModuleCardContent","JsonViewerEx","React","SentinelCardContent","children","report","mod","props","React","ModuleCardContent","FlexGrowRow","flexWrap","justifyContent","gap","JsonViewerEx","value","ModuleCardHeader","React","SentinelCardHeader","title","mod","props","React","ModuleCardHeader","config","name","SentinelCard","children","inPayloads","mod","props","retry","setRetry","useState","report","usePromise","React","Card","SentinelCardHeader","SentinelCardContent","SentinelCardActions","onReport","createContextEx","SentinelContext","useAsyncEffect","useWitnessesFromNode","MemorySentinel","SentinelConfigSchema","asWitnessInstance","React","useEffect","useMemo","useState","Enum","SentinelReportStatus","Idle","Queued","Started","Succeeded","Failed","SentinelProvider","account","archivist","children","ids","name","required","sentinel","setSentinel","useState","history","setHistory","progress","setProgress","status","setStatus","SentinelReportStatus","Idle","reportingErrors","setReportingErrors","witnesses","useWitnessesFromNode","useAsyncEffect","mounted","MemorySentinel","create","config","archivists","undefined","schema","SentinelConfigSchema","synchronous","tasks","map","mod","address","offCallbacks","push","on","outPayloads","length","Succeeded","Failed","Error","Started","witness","asWitnessInstance","id","callback","useEffect","value","useMemo","provided","React","SentinelContext","useContextEx","useSentinelContext","sentinel","history","progress","reportingErrors","status","useContextEx","SentinelContext","useModuleFromNode","asSentinelInstance","useSentinelFromNode","nameOrAddressOrInstance","config","mod","error","useModuleFromNode","instance","asSentinelInstance","Error","schema","name","address","console","message","undefined","useModulesFromNode","isSentinelInstance","useSentinelsFromNode","ids","config","modules","error","useModulesFromNode","reduce","prev","mod","isSentinelInstance","push","undefined","useWeakModuleFromNode","isSentinelInstance","useWeakSentinelFromNode","nameOrAddressOrInstance","config","useWeakModuleFromNode","identity","isSentinelInstance","exists","useWeakModulesFromNode","asSentinelInstance","useWeakSentinelsFromNode","ids","config","modules","error","useWeakModulesFromNode","map","mod","instance","asSentinelInstance","deref","WeakRef","filter","exists","undefined"]}
@@ -1,3 +1,10 @@
1
- import type { SentinelContextState } from './State.ts';
2
- export declare const SentinelContext: import("react").Context<SentinelContextState & import("@xyo-network/react-shared").ContextExState>;
1
+ export declare const SentinelContext: import("react").Context<{
2
+ history?: import("@xyo-network/boundwitness-model").BoundWitness[];
3
+ progress?: import("./State.ts").SentinelReportProgress;
4
+ reportingErrors?: Error[];
5
+ sentinel?: import("@xyo-network/sentinel-model").SentinelModule;
6
+ status?: import("./State.ts").SentinelReportStatus;
7
+ } & {
8
+ provided: true;
9
+ }>;
3
10
  //# sourceMappingURL=Context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../src/contexts/Context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,eAAO,MAAM,eAAe,oGAA0C,CAAA"}
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../src/contexts/Context.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe;;;;;;;;EAA0C,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import type { EnumValue } from '@xylabs/enum';
2
2
  import { Enum } from '@xylabs/enum';
3
+ import type { ContextExState } from '@xylabs/react-shared';
3
4
  import type { ArchivistModuleInstance } from '@xyo-network/archivist-model';
4
5
  import type { BoundWitness } from '@xyo-network/boundwitness-model';
5
6
  import type { SentinelModule } from '@xyo-network/sentinel-model';
@@ -24,11 +25,11 @@ export interface SentinelReportProgress {
24
25
  archivists?: Record<string, SentinelArchivistApiReportProgress>;
25
26
  witnesses?: Record<string, SentinelWitnessReportProgress>;
26
27
  }
27
- export interface SentinelContextState {
28
+ export type SentinelContextState = ContextExState<{
28
29
  history?: BoundWitness[];
29
30
  progress?: SentinelReportProgress;
30
31
  reportingErrors?: Error[];
31
32
  sentinel?: SentinelModule;
32
33
  status?: SentinelReportStatus;
33
- }
34
+ }>;
34
35
  //# sourceMappingURL=State.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../src/contexts/State.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,eAAO,MAAM,oBAAoB;;;;;;EAM/B,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEzE,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,uBAAuB,CAAA;IAClC,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,YAAY,EAAE,CAAA;IACxB,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"}
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../src/contexts/State.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,eAAO,MAAM,oBAAoB;;;;;;EAM/B,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEzE,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,uBAAuB,CAAA;IAClC,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,MAAM,oBAAoB,GAAG,cAAc,CAAC;IAChD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,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,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/react-sentinel",
3
- "version": "5.3.0",
3
+ "version": "5.3.1",
4
4
  "description": "Common React library for all XYO projects that use React",
5
5
  "keywords": [
6
6
  "xyo",
@@ -45,16 +45,16 @@
45
45
  "@xylabs/react-button": "^6.3.0",
46
46
  "@xylabs/react-flexbox": "^6.3.0",
47
47
  "@xylabs/react-promise": "^6.3.0",
48
+ "@xylabs/react-shared": "^6.3.0",
48
49
  "@xyo-network/account-model": "^3.15.5",
49
50
  "@xyo-network/archivist-model": "^3.15.5",
50
51
  "@xyo-network/boundwitness-model": "^3.15.5",
51
52
  "@xyo-network/module-model": "^3.15.5",
52
53
  "@xyo-network/payload-model": "^3.15.5",
53
- "@xyo-network/react-module": "^5.3.0",
54
- "@xyo-network/react-node": "^5.3.0",
55
- "@xyo-network/react-payload-raw-info": "^5.3.0",
56
- "@xyo-network/react-shared": "^5.3.0",
57
- "@xyo-network/react-witness": "^5.3.0",
54
+ "@xyo-network/react-module": "^5.3.1",
55
+ "@xyo-network/react-node": "^5.3.1",
56
+ "@xyo-network/react-payload-raw-info": "^5.3.1",
57
+ "@xyo-network/react-witness": "^5.3.1",
58
58
  "@xyo-network/sentinel-memory": "^3.15.5",
59
59
  "@xyo-network/sentinel-model": "^3.15.5",
60
60
  "@xyo-network/witness-model": "^3.15.5"
@@ -1,4 +1,4 @@
1
- import { createContextEx } from '@xyo-network/react-shared'
1
+ import { createContextEx } from '@xylabs/react-shared'
2
2
 
3
3
  import type { SentinelContextState } from './State.ts'
4
4
 
@@ -14,7 +14,7 @@ import React, {
14
14
  } from 'react'
15
15
 
16
16
  import { SentinelContext } from './Context.ts'
17
- import type { SentinelReportProgress } from './State.ts'
17
+ import type { SentinelContextState, SentinelReportProgress } from './State.ts'
18
18
  import { SentinelReportStatus } from './State.ts'
19
19
 
20
20
  export interface SentinelProviderProps {
@@ -121,7 +121,7 @@ export const SentinelProvider: React.FC<PropsWithChildren<SentinelProviderProps>
121
121
  setHistory(sentinel?.history as BoundWitness[])
122
122
  }, [sentinel])
123
123
 
124
- const value = useMemo(() => ({
124
+ const value: SentinelContextState = useMemo(() => ({
125
125
  history, progress, provided: true, reportingErrors, sentinel, status,
126
126
  }), [history, progress, reportingErrors, sentinel, status])
127
127
 
@@ -1,5 +1,6 @@
1
1
  import type { EnumValue } from '@xylabs/enum'
2
2
  import { Enum } from '@xylabs/enum'
3
+ import type { ContextExState } from '@xylabs/react-shared'
3
4
  import type { ArchivistModuleInstance } from '@xyo-network/archivist-model'
4
5
  import type { BoundWitness } from '@xyo-network/boundwitness-model'
5
6
  import type { SentinelModule } from '@xyo-network/sentinel-model'
@@ -30,10 +31,10 @@ export interface SentinelReportProgress {
30
31
  witnesses?: Record<string, SentinelWitnessReportProgress>
31
32
  }
32
33
 
33
- export interface SentinelContextState {
34
+ export type SentinelContextState = ContextExState<{
34
35
  history?: BoundWitness[]
35
36
  progress?: SentinelReportProgress
36
37
  reportingErrors?: Error[]
37
38
  sentinel?: SentinelModule
38
39
  status?: SentinelReportStatus
39
- }
40
+ }>
@@ -1,4 +1,4 @@
1
- import { useContextEx } from '@xyo-network/react-shared'
1
+ import { useContextEx } from '@xylabs/react-shared'
2
2
 
3
3
  import { SentinelContext } from './Context.ts'
4
4