@xyo-network/react-chain-network 1.3.17 → 1.3.19

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/dist/browser/index.mjs +92 -20
  2. package/dist/browser/index.mjs.map +1 -1
  3. package/dist/types/components/index.d.ts +1 -0
  4. package/dist/types/components/index.d.ts.map +1 -1
  5. package/dist/types/components/status/Alert.d.ts +8 -0
  6. package/dist/types/components/status/Alert.d.ts.map +1 -0
  7. package/dist/types/components/status/Dialog.d.ts +8 -0
  8. package/dist/types/components/status/Dialog.d.ts.map +1 -0
  9. package/dist/types/components/status/index.d.ts +2 -0
  10. package/dist/types/components/status/index.d.ts.map +1 -0
  11. package/dist/types/context/network/context.d.ts +22 -2
  12. package/dist/types/context/network/context.d.ts.map +1 -1
  13. package/dist/types/context/network/state.d.ts +3 -3
  14. package/dist/types/context/network/state.d.ts.map +1 -1
  15. package/dist/types/context/network/use.d.ts +8 -1
  16. package/dist/types/context/network/use.d.ts.map +1 -1
  17. package/dist/types/helpers/Networks.d.ts.map +1 -1
  18. package/dist/types/helpers/getNetworkNode.d.ts +1 -3
  19. package/dist/types/helpers/getNetworkNode.d.ts.map +1 -1
  20. package/dist/types/helpers/{getBridgedNodes.d.ts → getNetworkNodes.d.ts} +3 -5
  21. package/dist/types/helpers/getNetworkNodes.d.ts.map +1 -0
  22. package/dist/types/helpers/index.d.ts +1 -1
  23. package/dist/types/helpers/initNetworkNode.d.ts.map +1 -1
  24. package/dist/types/models/Bootstrap.d.ts +4 -0
  25. package/dist/types/models/Bootstrap.d.ts.map +1 -1
  26. package/dist/types/models/NetworkStatus.d.ts +17 -0
  27. package/dist/types/models/NetworkStatus.d.ts.map +1 -0
  28. package/dist/types/models/index.d.ts +1 -0
  29. package/dist/types/models/index.d.ts.map +1 -1
  30. package/package.json +27 -27
  31. package/src/components/index.ts +1 -0
  32. package/src/components/status/Alert.stories.tsx +65 -0
  33. package/src/components/status/Alert.tsx +46 -0
  34. package/src/components/status/Dialog.tsx +52 -0
  35. package/src/components/status/index.ts +1 -0
  36. package/src/context/network/Provider.tsx +1 -1
  37. package/src/context/network/state.ts +3 -3
  38. package/src/helpers/Networks.ts +7 -0
  39. package/src/helpers/getNetworkNodes.ts +7 -0
  40. package/src/helpers/index.ts +1 -1
  41. package/src/helpers/initNetworkNode.ts +4 -8
  42. package/src/models/Bootstrap.ts +4 -0
  43. package/src/models/NetworkStatus.ts +23 -0
  44. package/src/models/index.ts +1 -0
  45. package/dist/types/helpers/getBridgedNodes.d.ts.map +0 -1
  46. package/src/helpers/getBridgedNodes.ts +0 -7
@@ -14,14 +14,11 @@ import { ErrorRender } from "@xylabs/react-error";
14
14
  import { usePromise } from "@xylabs/react-promise";
15
15
  import React4, { useCallback, useMemo, useState } from "react";
16
16
 
17
- // src/helpers/getBridgedNodes.ts
18
- var bridgedNodeMap = /* @__PURE__ */ new Map();
19
- var getBridgedNodes = /* @__PURE__ */ __name(() => {
20
- return bridgedNodeMap;
21
- }, "getBridgedNodes");
22
-
23
- // src/helpers/initNetworkNode.ts
24
- import { initBridge } from "@xyo-network/chain-orchestration";
17
+ // src/helpers/getNetworkNodes.ts
18
+ var networkNodeMap = /* @__PURE__ */ new Map();
19
+ var getNetworkNodes = /* @__PURE__ */ __name(() => {
20
+ return networkNodeMap;
21
+ }, "getNetworkNodes");
25
22
 
26
23
  // src/helpers/getNetworkNode.ts
27
24
  import { ManifestWrapper } from "@xyo-network/manifest-wrapper";
@@ -59,13 +56,10 @@ var getNetworkNode = /* @__PURE__ */ __name(async () => {
59
56
 
60
57
  // src/helpers/initNetworkNode.ts
61
58
  var initNetworkNode = /* @__PURE__ */ __name(async (activeNetwork) => {
62
- const bridgedNodeMap2 = getBridgedNodes();
63
- if (bridgedNodeMap2.has(activeNetwork.url)) return bridgedNodeMap2.get(activeNetwork.url);
64
- const bridge = await initBridge(activeNetwork.url);
59
+ const networkNodeMap2 = getNetworkNodes();
60
+ if (networkNodeMap2.has(activeNetwork.url)) return networkNodeMap2.get(activeNetwork.url);
65
61
  const activeNetworkNode = await getNetworkNode();
66
- await activeNetworkNode.register?.(bridge);
67
- await activeNetworkNode.attach?.(bridge.address, true);
68
- bridgedNodeMap2.set(activeNetwork.url, activeNetworkNode);
62
+ networkNodeMap2.set(activeNetwork.url, activeNetworkNode);
69
63
  return activeNetworkNode;
70
64
  }, "initNetworkNode");
71
65
 
@@ -94,6 +88,11 @@ var NetworkBootstrapSchema = "network.xyo.network.bootstrap";
94
88
  var isNetworkBootstrap = isPayloadOfSchemaType(NetworkBootstrapSchema);
95
89
  var asOptionalNetwork = AsObjectFactory.createOptional(isNetworkBootstrap);
96
90
 
91
+ // src/models/NetworkStatus.ts
92
+ import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
93
+ var NetworkStatusSchema = "network.xyo.chain.status";
94
+ var isNetworkStatus = isPayloadOfSchemaType2(NetworkStatusSchema);
95
+
97
96
  // src/helpers/Networks.ts
98
97
  var MainNetwork = {
99
98
  description: "Main Network for XYO Layer 1",
@@ -102,7 +101,9 @@ var MainNetwork = {
102
101
  name: "Mainnet",
103
102
  schema: NetworkBootstrapSchema,
104
103
  symbol: "XL1",
105
- url: "https://api.chain.xyo.network"
104
+ url: "https://api.chain.xyo.network",
105
+ explorerUrl: "https://explorer.xyo.network",
106
+ statusUrl: "https://xyo.network/chain-network-status-mainnet.json"
106
107
  };
107
108
  var SequenceNetwork = {
108
109
  description: "Test Network for XYO Layer 1",
@@ -111,7 +112,9 @@ var SequenceNetwork = {
111
112
  name: "Sequence",
112
113
  schema: NetworkBootstrapSchema,
113
114
  symbol: "XL1",
114
- url: "https://beta.api.chain.xyo.network"
115
+ url: "https://beta.api.chain.xyo.network",
116
+ explorerUrl: "https://beta.explorer.xyo.network",
117
+ statusUrl: "https://beta.xyo.network/chain-network-status-sequence.json"
115
118
  };
116
119
  var LocalNetwork = {
117
120
  description: "Local Node",
@@ -120,7 +123,10 @@ var LocalNetwork = {
120
123
  name: "Local",
121
124
  schema: NetworkBootstrapSchema,
122
125
  symbol: "XL1",
123
- url: "http://localhost:8080"
126
+ url: "http://localhost:8080",
127
+ explorerUrl: "http://localhost:3000",
128
+ // Useful for testing various network status updates
129
+ statusUrl: "http://localhost:3002/chain-network-status-local.json"
124
130
  };
125
131
  var DefaultNetworks = [
126
132
  MainNetwork,
@@ -247,10 +253,73 @@ var NetworkMenuItem = /* @__PURE__ */ __name(({ active, network, onClick, update
247
253
  }), /* @__PURE__ */ React7.createElement(ListItemText, null, network?.name));
248
254
  }, "NetworkMenuItem");
249
255
 
256
+ // src/components/status/Alert.tsx
257
+ import { Alert, AlertTitle, Button as Button2 } from "@mui/material";
258
+ import React9, { useMemo as useMemo2, useState as useState2 } from "react";
259
+
260
+ // src/components/status/Dialog.tsx
261
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography } from "@mui/material";
262
+ import React8 from "react";
263
+ var NetworkStatusDialog = /* @__PURE__ */ __name(({ updates, ...props }) => {
264
+ return /* @__PURE__ */ React8.createElement(Dialog, props, /* @__PURE__ */ React8.createElement(DialogTitle, null, "Recent Status Updates"), /* @__PURE__ */ React8.createElement(DialogContent, null, /* @__PURE__ */ React8.createElement(List, null, updates.map(({ start, end, update }) => /* @__PURE__ */ React8.createElement(ListItem, {
265
+ key: start + update,
266
+ sx: {
267
+ flexDirection: "column",
268
+ alignItems: "start",
269
+ pl: 0
270
+ }
271
+ }, /* @__PURE__ */ React8.createElement(Typography, null, update), /* @__PURE__ */ React8.createElement(Typography, {
272
+ gutterBottom: true,
273
+ sx: {
274
+ opacity: 0.75,
275
+ fontSize: ".8333rem"
276
+ }
277
+ }, "Start:", " ", new Date(start).toLocaleString(), " ", /* @__PURE__ */ React8.createElement("br", null), "End:", " ", new Date(end).toLocaleString()))))), /* @__PURE__ */ React8.createElement(DialogActions, null, /* @__PURE__ */ React8.createElement(Button, {
278
+ onClick: /* @__PURE__ */ __name((e) => props.onClose?.(e, "backdropClick"), "onClick"),
279
+ color: "primary",
280
+ variant: "outlined"
281
+ }, "Close")));
282
+ }, "NetworkStatusDialog");
283
+
284
+ // src/components/status/Alert.tsx
285
+ var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
286
+ const [open, setOpen] = useState2(false);
287
+ const handleClose = /* @__PURE__ */ __name(() => setOpen(false), "handleClose");
288
+ const severity = useMemo2(() => {
289
+ if (!status) return;
290
+ switch (status.state) {
291
+ case "online": {
292
+ return "success";
293
+ }
294
+ case "offline": {
295
+ return "error";
296
+ }
297
+ case "degraded": {
298
+ return "warning";
299
+ }
300
+ }
301
+ }, [
302
+ status
303
+ ]);
304
+ return /* @__PURE__ */ React9.createElement(Alert, {
305
+ severity,
306
+ ...props
307
+ }, /* @__PURE__ */ React9.createElement(AlertTitle, null, status?.description), status?.updates && status.updates.length > 0 && /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(Button2, {
308
+ color: severity,
309
+ variant: "outlined",
310
+ size: "small",
311
+ onClick: /* @__PURE__ */ __name(() => setOpen(true), "onClick")
312
+ }, "Updates"), /* @__PURE__ */ React9.createElement(NetworkStatusDialog, {
313
+ open,
314
+ onClose: handleClose,
315
+ updates: status.updates
316
+ })));
317
+ }, "NetworkStatusAlert");
318
+
250
319
  // src/provider/NetworkProvider.ts
251
320
  import { assertEx } from "@xylabs/assert";
252
321
  import { asArchivistInstance } from "@xyo-network/archivist-model";
253
- import { initBridge as initBridge2 } from "@xyo-network/chain-orchestration";
322
+ import { initBridge } from "@xyo-network/chain-orchestration";
254
323
  import { findMostRecentBlock, hydrateBlock } from "@xyo-network/chain-protocol";
255
324
  import { XyoChainBlockNumberIterator } from "@xyo-network/chain-services";
256
325
  import { PayloadBuilder } from "@xyo-network/payload-builder";
@@ -267,7 +336,7 @@ var NetworkProvider = class _NetworkProvider {
267
336
  return assertEx(this._bridge, () => "Bridge not set");
268
337
  }
269
338
  static async create({ network }) {
270
- const bridge = await initBridge2(network);
339
+ const bridge = await initBridge(network);
271
340
  return new _NetworkProvider(bridge);
272
341
  }
273
342
  accountBalance(_address) {
@@ -374,11 +443,14 @@ export {
374
443
  NetworkIcon,
375
444
  NetworkMenuItem,
376
445
  NetworkProvider,
446
+ NetworkStatusAlert,
447
+ NetworkStatusSchema,
377
448
  SequenceNetwork,
378
449
  asOptionalNetwork,
379
- getBridgedNodes,
450
+ getNetworkNodes,
380
451
  initNetworkNode,
381
452
  isNetworkBootstrap,
453
+ isNetworkStatus,
382
454
  useChainNetwork
383
455
  };
384
456
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/menu/Avatar.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/helpers/getBridgedNodes.ts","../../src/helpers/initNetworkNode.ts","../../src/helpers/getNetworkNode.ts","../../src/helpers/manifest/network.json","../../src/helpers/manifest/networkManifest.ts","../../src/images/icons/local/index.tsx","../../src/images/icons/mainnet/index.tsx","../../src/images/icons/sequence/index.tsx","../../src/models/Bootstrap.ts","../../src/helpers/Networks.ts","../../src/context/network/use.ts","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/provider/NetworkProvider.ts"],"sourcesContent":["import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport const NetworkAvatar: React.FC<AvatarProps & { icon?: string; name?: string }> = ({\n icon, name, ...props\n}) => {\n return (\n <Avatar\n sx={{\n backgroundColor: 'white', height: 30, width: 30,\n }}\n alt={name}\n {...props}\n >\n <NetworkIcon icon={icon} />\n </Avatar>\n )\n}\n\nexport const ActiveNetworkAvatar: React.FC<AvatarProps> = (props) => {\n const { activeNetwork } = useChainNetwork()\n\n return (\n <NetworkAvatar\n icon={activeNetwork?.icon}\n name={activeNetwork?.name}\n {...props}\n />\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { ChainNetworkState } from './state.ts'\n\nexport const ChainNetworkContext = createContextEx<ChainNetworkState>()\n","import { ErrorRender } from '@xylabs/react-error'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { SequenceNetwork } from '../../helpers/index.ts'\nimport type { NetworkBootstrap } from '../../models/index.ts'\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n\n // Set the active network upon initialization\n const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {\n // ensure networks are loaded\n if (!networks) return\n // get last saved active network\n const activeNetwork = await getActiveNetwork?.()\n // ensure the active network saved is found in the list of networks\n if (activeNetwork && networks?.find(network => network.id === activeNetwork.id)) {\n // Set the active network if it exists\n return activeNetwork\n } else {\n // Set the default network if no active network exists\n const defaultNetwork = networks.find(network => network.id === SequenceNetwork.id) ?? networks[1]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n useMemo(() => {\n if (resolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n }\n }, [resolvedActiveNetwork])\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks])\n\n const value = useMemo<ChainNetworkState>(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n walletNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, networks, updateActiveNetwork])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"WalletNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import type { AttachableNodeInstance } from '@xyo-network/node-model'\n\nconst bridgedNodeMap = new Map<string, AttachableNodeInstance>()\n\nexport const getBridgedNodes = () => {\n return bridgedNodeMap\n}\n","import { initBridge } from '@xyo-network/chain-orchestration'\nimport type { AttachableNodeInstance } from '@xyo-network/node-model'\n\nimport type { NetworkBootstrap } from '../models/index.ts'\nimport { getBridgedNodes } from './getBridgedNodes.ts'\nimport { getNetworkNode } from './getNetworkNode.ts'\n\nexport const initNetworkNode = async (activeNetwork: NetworkBootstrap): Promise<AttachableNodeInstance> => {\n const bridgedNodeMap = getBridgedNodes()\n if (bridgedNodeMap.has(activeNetwork.url)) return bridgedNodeMap.get(activeNetwork.url)!\n\n const bridge = await initBridge(activeNetwork.url)\n const activeNetworkNode = await getNetworkNode()\n await activeNetworkNode.register?.(bridge)\n await activeNetworkNode.attach?.(bridge.address, true)\n bridgedNodeMap.set(activeNetwork.url, activeNetworkNode)\n\n return activeNetworkNode\n}\n","import { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport { NetworkNodeManifest } from './manifest/index.ts'\n\nexport const getNetworkNode = async () => {\n const wrapper = new ManifestWrapper(NetworkNodeManifest, await HDWallet.random(), new ModuleFactoryLocator())\n const [node] = await wrapper.loadNodes()\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"Network\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './network.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NetworkNodeManifest = node as PackageManifestPayload\n","import { SvgIcon } from '@mui/material'\nimport React from 'react'\n\nimport LocalNetworkSvg from './XL1_Logo_Icon_Localhost.svg?react'\nexport const LocalNetworkIcon = (props: React.ComponentProps<typeof SvgIcon>) => {\n return (\n <SvgIcon\n viewBox=\"0 0 256 256\"\n component={LocalNetworkSvg}\n {...props}\n />\n )\n}\n\nexport { default as LocalNetworkIconString } from './XL1_Logo_Icon_Localhost.svg?raw'\n","import { SvgIcon } from '@mui/material'\nimport React from 'react'\n\nimport MainNetworkSvg from './XL1_Logo_Icon_Mainnet.svg?react'\nexport const MainNetworkIcon = (props: React.ComponentProps<typeof SvgIcon>) => {\n return (\n <SvgIcon\n viewBox=\"0 0 256 256\"\n component={MainNetworkSvg}\n {...props}\n />\n )\n}\n\nexport { default as MainNetworkIconString } from './XL1_Logo_Icon_Mainnet.svg?raw'\n","import { SvgIcon } from '@mui/material'\nimport React from 'react'\n\nimport SequenceNetworkSvg from './XL1_Logo_Icon_Testnet.svg?react'\nexport const SequenceNetworkIcon = (props: React.ComponentProps<typeof SvgIcon>) => {\n return (\n <SvgIcon\n viewBox=\"0 0 256 256\"\n component={SequenceNetworkSvg}\n {...props}\n />\n )\n}\n\nexport { default as SequenceNetworkIconString } from './XL1_Logo_Icon_Testnet.svg?raw'\n","import type { Address } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport type { ChainInformation } from '@xyo-network/xl1-protocol'\n\nexport const NetworkBootstrapSchema = 'network.xyo.network.bootstrap' as const\nexport type NetworkBootstrapSchema = typeof NetworkBootstrapSchema\n\nexport interface ChainForkFields {\n /** Block Number at which the chain was forked from */\n forkedAtLastBlockNumber?: string\n /** Hash in the last block the chain was forked from */\n forkedAtLastHash?: string\n /** Address of the forked chain */\n forkedChainId?: Address\n}\n\nexport interface NetworkFields {\n /** Description of the network */\n description: string\n /** string representation of the icon (svg) */\n icon?: string\n /** Machine-readable identifier */\n id: string\n /** Human-readable identifier */\n name: string\n schema: NetworkBootstrapSchema\n /** Symbol of the network */\n symbol?: string\n /** Url for accessing the network */\n url: string\n}\n\n/** Note: Optional Properties can be found walking the chain to the genesis block */\nexport interface NetworkBootstrapFields extends NetworkFields, ChainForkFields {\n /** Address of the chain, i.e. smart contract address */\n chainInfo?: ChainInformation\n}\n\nexport interface Network extends NetworkBootstrap {\n custom: boolean\n}\n\nexport type NetworkBootstrap = Payload<NetworkBootstrapFields, NetworkBootstrapSchema>\n\nexport const isNetworkBootstrap = isPayloadOfSchemaType<NetworkBootstrap>(NetworkBootstrapSchema)\n\nexport const asOptionalNetwork = AsObjectFactory.createOptional(isNetworkBootstrap)\n","import {\n LocalNetworkIconString, MainNetworkIconString, SequenceNetworkIconString,\n} from '../images/index.ts'\nimport type { NetworkBootstrap } from '../models/index.ts'\nimport { NetworkBootstrapSchema } from '../models/index.ts'\n\nexport const MainNetwork: NetworkBootstrap = {\n description: 'Main Network for XYO Layer 1',\n icon: MainNetworkIconString,\n id: 'mainnet',\n name: 'Mainnet',\n schema: NetworkBootstrapSchema,\n symbol: 'XL1',\n url: 'https://api.chain.xyo.network',\n}\n\nexport const SequenceNetwork: NetworkBootstrap = {\n description: 'Test Network for XYO Layer 1',\n icon: SequenceNetworkIconString,\n id: 'sequence',\n name: 'Sequence',\n schema: NetworkBootstrapSchema,\n symbol: 'XL1',\n url: 'https://beta.api.chain.xyo.network',\n}\n\nexport const LocalNetwork: NetworkBootstrap = {\n description: 'Local Node',\n icon: LocalNetworkIconString,\n id: 'local',\n name: 'Local',\n schema: NetworkBootstrapSchema,\n symbol: 'XL1',\n url: 'http://localhost:8080',\n}\n\nexport const DefaultNetworks: NetworkBootstrap[] = [MainNetwork, SequenceNetwork, LocalNetwork]\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'WalletNetwork', required)\n","import type { IconProps } from '@mui/material'\nimport { Icon } from '@mui/material'\nimport React from 'react'\n\nexport const NetworkIcon: React.FC<IconProps & { icon?: string }> = ({ icon, ...props }) => {\n return (\n <Icon\n sx={{\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\n }}\n ref={(ref) => {\n if (ref && icon !== undefined) {\n ref.innerHTML = icon\n }\n }}\n {...props}\n />\n )\n}\n","import type { MenuItemProps } from '@mui/material'\nimport { ListItemText } from '@mui/material'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport type { NetworkBootstrap } from '../../models/index.ts'\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: string) => void\n}\n\nexport const NetworkMenuItem: React.FC<NetworkMenuItemProps> = ({\n active, network, onClick, updateActiveNetwork, ...props\n}) => {\n const handleClick = (event: ReactMouseEvent<HTMLLIElement, MouseEvent>) => {\n if (network === undefined) throw new Error('Network is undefined')\n updateActiveNetwork?.(network.id)\n onClick?.(event)\n }\n\n return (\n <ActiveMenuItem\n title={network?.name}\n disableRipple\n onClick={handleClick}\n active={active}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} />\n <ListItemText>{network?.name}</ListItemText>\n </ActiveMenuItem>\n )\n}\n","/* eslint-disable sonarjs/deprecation */\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport { initBridge } from '@xyo-network/chain-orchestration'\nimport { findMostRecentBlock, hydrateBlock } from '@xyo-network/chain-protocol'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainInformation,\n HydratedBlock, SignedHydratedBlock, SignedHydratedTransaction, TransactionBoundWitness,\n TransactionFeesBigInt,\n XyoRunner,\n XyoSigner,\n XyoViewer,\n XyoWallet,\n} from '@xyo-network/xl1-protocol'\n\nexport const FINALIZED_ARCHIVIST = 'XYOChain:Chain:Finalized' as const\n\nexport interface NetworkProviderParams {\n chainInformation?: ChainInformation\n network: string\n}\n\n// TODO: change back to implementing XyoProvider which requires sub objects\n/**\n * @deprecated Use MemoryXyoProvider instead\n */\nexport class NetworkProvider implements XyoSigner, XyoViewer, XyoWallet, XyoRunner {\n private _bridge: BridgeInstance\n\n constructor(bridge: BridgeInstance) {\n this._bridge = bridge\n }\n\n private get bridge() {\n return assertEx(this._bridge, () => 'Bridge not set')\n }\n\n static async create({ network }: NetworkProviderParams): Promise<NetworkProvider> {\n const bridge = await initBridge(network)\n return new NetworkProvider(bridge)\n }\n\n accountBalance(_address: Address): Promisable<bigint> {\n throw new Error('Method not implemented.')\n }\n\n accounts(): Promisable<Address[]> {\n throw new Error('Method not implemented.')\n }\n\n addChain(_chain: Address, _name?: string): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n address(): Promisable<Address> {\n throw new Error('Method not implemented.')\n }\n\n blockByHash(_hash: Hash): Promisable<SignedHydratedBlock | null> {\n throw new Error('Method not implemented.')\n }\n\n blockByNumber(_blockNumber: number): Promisable<SignedHydratedBlock | null> {\n throw new Error('Method not implemented.')\n }\n\n blocksByHash(_hash: Hash, _limit?: number): Promisable<SignedHydratedBlock[]> {\n throw new Error('Method not implemented.')\n }\n\n broadcastTransaction(_transaction: SignedHydratedTransaction): Promisable<Hash> {\n throw new Error('Method not implemented.')\n }\n\n chain(): Promisable<Address> {\n throw new Error('Method not implemented.')\n }\n\n chainId(): Promisable<Address> {\n throw new Error('Method not implemented.')\n }\n\n chains(): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n createSignedTransaction(\n _chain: Address,\n _elevatedPayloads: AllowedBlockPayload[],\n _additionalPayloads: Payload[],\n _nbf: number,\n _exp: number,\n _fees: TransactionFeesBigInt,\n _from?: Address,\n ): Promisable<Signed<TransactionBoundWitness>> {\n throw new Error('Method not implemented.')\n }\n\n currentBlock(): Promisable<SignedHydratedBlock> {\n throw new Error('Method not implemented.')\n }\n\n currentBlockHash(): Promisable<Hash> {\n throw new Error('Method not implemented.')\n }\n\n currentBlockNumber(): Promisable<number> {\n throw new Error('Method not implemented.')\n }\n\n permissions(): Promisable<Record<string, object>> {\n throw new Error('Method not implemented.')\n }\n\n async previousBlocks(startingBlock?: Hash, count = 25): Promise<HydratedBlock[]> {\n const chainArchivist = await this.getFinalizedArchivist()\n const head = assertEx(await findMostRecentBlock(chainArchivist, { cursor: startingBlock }), () => 'Unable to find most recent block')\n const iterator = await XyoChainBlockNumberIterator.create({ chainArchivist, head })\n const blocks = await iterator.previous(head.block, count)\n\n let hydratedBlocks: HydratedBlock[] = []\n for (const block of blocks) {\n hydratedBlocks.push(await hydrateBlock(chainArchivist, await PayloadBuilder.hash(block)))\n }\n return hydratedBlocks\n }\n\n requestPermissions(_permissions: object): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n revokePermissions(_permissions: object): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n signTransaction(_transaction: TransactionBoundWitness): Promisable<Signed<TransactionBoundWitness>> {\n throw new Error('Method not implemented.')\n }\n\n switchChain(_chain: Address): Promisable<void> {\n throw new Error('Method not implemented.')\n }\n\n transactionByBlockHashAndIndex(_blockHash: Hash, _transactionIndex: number): Promisable<SignedHydratedTransaction | null> {\n throw new Error('Method not implemented.')\n }\n\n transactionByBlockNumberAndIndex(_blockNumber: number, _transactionIndex: number): Promisable<SignedHydratedTransaction | null> {\n throw new Error('Method not implemented.')\n }\n\n transactionByHash(_transactionHash: Hash): Promisable<SignedHydratedTransaction | null> {\n throw new Error('Method not implemented.')\n }\n\n private async getFinalizedArchivist(): Promise<ArchivistInstance> {\n const bridge = this.bridge\n const mod = assertEx(await bridge.resolve(FINALIZED_ARCHIVIST), () => `${FINALIZED_ARCHIVIST} not found`)\n return assertEx(asArchivistInstance(mod), () => `${FINALIZED_ARCHIVIST} is not an archivist`)\n }\n}\n"],"mappings":"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","names":["Avatar","React","createContextEx","ChainNetworkContext","ErrorRender","usePromise","React","useCallback","useMemo","useState","bridgedNodeMap","Map","getBridgedNodes","initBridge","ManifestWrapper","ModuleFactoryLocator","HDWallet","NetworkNodeManifest","node","getNetworkNode","wrapper","ManifestWrapper","NetworkNodeManifest","HDWallet","random","ModuleFactoryLocator","node","loadNodes","initNetworkNode","activeNetwork","bridgedNodeMap","getBridgedNodes","has","url","get","bridge","initBridge","activeNetworkNode","getNetworkNode","register","attach","address","set","SvgIcon","React","LocalNetworkSvg","LocalNetworkIconString","default","SvgIcon","React","MainNetworkSvg","MainNetworkIconString","default","SvgIcon","React","SequenceNetworkSvg","SequenceNetworkIconString","default","AsObjectFactory","isPayloadOfSchemaType","NetworkBootstrapSchema","isNetworkBootstrap","asOptionalNetwork","createOptional","MainNetwork","description","icon","MainNetworkIconString","id","name","schema","NetworkBootstrapSchema","symbol","url","SequenceNetwork","SequenceNetworkIconString","LocalNetwork","LocalNetworkIconString","DefaultNetworks","ChainNetworkProvider","children","getActiveNetwork","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","SequenceNetwork","useMemo","updateActiveNetwork","useCallback","networkId","undefined","value","provided","walletNetworkError","React","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","Icon","React","NetworkIcon","icon","props","React","Icon","sx","display","alignItems","justifyContent","ref","undefined","innerHTML","NetworkAvatar","icon","name","props","React","Avatar","sx","backgroundColor","height","width","alt","NetworkIcon","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","NetworkAvatar","icon","ListItemText","assertEx","asArchivistInstance","initBridge","findMostRecentBlock","hydrateBlock","XyoChainBlockNumberIterator","PayloadBuilder","FINALIZED_ARCHIVIST","NetworkProvider","_bridge","constructor","bridge","assertEx","create","network","initBridge","accountBalance","_address","Error","accounts","addChain","_chain","_name","address","blockByHash","_hash","blockByNumber","_blockNumber","blocksByHash","_limit","broadcastTransaction","_transaction","chain","chainId","chains","createSignedTransaction","_elevatedPayloads","_additionalPayloads","_nbf","_exp","_fees","_from","currentBlock","currentBlockHash","currentBlockNumber","permissions","previousBlocks","startingBlock","count","chainArchivist","getFinalizedArchivist","head","findMostRecentBlock","cursor","iterator","XyoChainBlockNumberIterator","blocks","previous","block","hydratedBlocks","push","hydrateBlock","PayloadBuilder","hash","requestPermissions","_permissions","revokePermissions","signTransaction","switchChain","transactionByBlockHashAndIndex","_blockHash","_transactionIndex","transactionByBlockNumberAndIndex","transactionByHash","_transactionHash","mod","resolve","asArchivistInstance"]}
1
+ {"version":3,"sources":["../../src/components/menu/Avatar.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/helpers/getNetworkNodes.ts","../../src/helpers/getNetworkNode.ts","../../src/helpers/manifest/network.json","../../src/helpers/manifest/networkManifest.ts","../../src/helpers/initNetworkNode.ts","../../src/images/icons/local/index.tsx","../../src/images/icons/mainnet/index.tsx","../../src/images/icons/sequence/index.tsx","../../src/models/Bootstrap.ts","../../src/models/NetworkStatus.ts","../../src/helpers/Networks.ts","../../src/context/network/use.ts","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/provider/NetworkProvider.ts"],"sourcesContent":["import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport const NetworkAvatar: React.FC<AvatarProps & { icon?: string; name?: string }> = ({\n icon, name, ...props\n}) => {\n return (\n <Avatar\n sx={{\n backgroundColor: 'white', height: 30, width: 30,\n }}\n alt={name}\n {...props}\n >\n <NetworkIcon icon={icon} />\n </Avatar>\n )\n}\n\nexport const ActiveNetworkAvatar: React.FC<AvatarProps> = (props) => {\n const { activeNetwork } = useChainNetwork()\n\n return (\n <NetworkAvatar\n icon={activeNetwork?.icon}\n name={activeNetwork?.name}\n {...props}\n />\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { ChainNetworkState } from './state.ts'\n\nexport const ChainNetworkContext = createContextEx<ChainNetworkState>()\n","import { ErrorRender } from '@xylabs/react-error'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { SequenceNetwork } from '../../helpers/index.ts'\nimport type { NetworkBootstrap } from '../../models/index.ts'\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n\n // Set the active network upon initialization\n const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {\n // ensure networks are loaded\n if (!networks) return\n // get last saved active network\n const activeNetwork = await getActiveNetwork?.()\n // ensure the active network saved is found in the list of networks\n if (activeNetwork && networks?.find(network => network.id === activeNetwork.id)) {\n // Set the active network if it exists\n return activeNetwork\n } else {\n // Set the default network if no active network exists\n const defaultNetwork = networks.find(network => network.id === SequenceNetwork.id) ?? networks[1]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n useMemo(() => {\n if (resolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n }\n }, [resolvedActiveNetwork])\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n walletNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, networks, updateActiveNetwork])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"WalletNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import type { AttachableNodeInstance } from '@xyo-network/node-model'\n\nconst networkNodeMap = new Map<string, AttachableNodeInstance>()\n\nexport const getNetworkNodes = () => {\n return networkNodeMap\n}\n","import { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport { NetworkNodeManifest } from './manifest/index.ts'\n\nexport const getNetworkNode = async () => {\n const wrapper = new ManifestWrapper(NetworkNodeManifest, await HDWallet.random(), new ModuleFactoryLocator())\n const [node] = await wrapper.loadNodes()\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"Network\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './network.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NetworkNodeManifest = node as PackageManifestPayload\n","import type { AttachableNodeInstance } from '@xyo-network/node-model'\n\nimport type { NetworkBootstrap } from '../models/index.ts'\nimport { getNetworkNode } from './getNetworkNode.ts'\nimport { getNetworkNodes } from './getNetworkNodes.ts'\n\nexport const initNetworkNode = async (activeNetwork: NetworkBootstrap): Promise<AttachableNodeInstance> => {\n const networkNodeMap = getNetworkNodes()\n if (networkNodeMap.has(activeNetwork.url)) return networkNodeMap.get(activeNetwork.url)!\n\n const activeNetworkNode = await getNetworkNode()\n networkNodeMap.set(activeNetwork.url, activeNetworkNode)\n\n return activeNetworkNode\n}\n","import { SvgIcon } from '@mui/material'\nimport React from 'react'\n\nimport LocalNetworkSvg from './XL1_Logo_Icon_Localhost.svg?react'\nexport const LocalNetworkIcon = (props: React.ComponentProps<typeof SvgIcon>) => {\n return (\n <SvgIcon\n viewBox=\"0 0 256 256\"\n component={LocalNetworkSvg}\n {...props}\n />\n )\n}\n\nexport { default as LocalNetworkIconString } from './XL1_Logo_Icon_Localhost.svg?raw'\n","import { SvgIcon } from '@mui/material'\nimport React from 'react'\n\nimport MainNetworkSvg from './XL1_Logo_Icon_Mainnet.svg?react'\nexport const MainNetworkIcon = (props: React.ComponentProps<typeof SvgIcon>) => {\n return (\n <SvgIcon\n viewBox=\"0 0 256 256\"\n component={MainNetworkSvg}\n {...props}\n />\n )\n}\n\nexport { default as MainNetworkIconString } from './XL1_Logo_Icon_Mainnet.svg?raw'\n","import { SvgIcon } from '@mui/material'\nimport React from 'react'\n\nimport SequenceNetworkSvg from './XL1_Logo_Icon_Testnet.svg?react'\nexport const SequenceNetworkIcon = (props: React.ComponentProps<typeof SvgIcon>) => {\n return (\n <SvgIcon\n viewBox=\"0 0 256 256\"\n component={SequenceNetworkSvg}\n {...props}\n />\n )\n}\n\nexport { default as SequenceNetworkIconString } from './XL1_Logo_Icon_Testnet.svg?raw'\n","import type { Address } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport type { ChainInformation } from '@xyo-network/xl1-protocol'\n\nexport const NetworkBootstrapSchema = 'network.xyo.network.bootstrap' as const\nexport type NetworkBootstrapSchema = typeof NetworkBootstrapSchema\n\nexport interface ChainForkFields {\n /** Block Number at which the chain was forked from */\n forkedAtLastBlockNumber?: string\n /** Hash in the last block the chain was forked from */\n forkedAtLastHash?: string\n /** Address of the forked chain */\n forkedChainId?: Address\n}\n\nexport interface NetworkFields {\n /** Description of the network */\n description: string\n /** Url for accessing the network explorer */\n explorerUrl?: string\n /** string representation of the icon (svg) */\n icon?: string\n /** Machine-readable identifier */\n id: string\n /** Human-readable identifier */\n name: string\n schema: NetworkBootstrapSchema\n /** Url for the json file for current NetworkStatus payload */\n statusUrl?: string\n /** Symbol of the network */\n symbol?: string\n /** Url for accessing the network */\n url: string\n}\n\n/** Note: Optional Properties can be found walking the chain to the genesis block */\nexport interface NetworkBootstrapFields extends NetworkFields, ChainForkFields {\n /** Address of the chain, i.e. smart contract address */\n chainInfo?: ChainInformation\n}\n\nexport interface Network extends NetworkBootstrap {\n custom: boolean\n}\n\nexport type NetworkBootstrap = Payload<NetworkBootstrapFields, NetworkBootstrapSchema>\n\nexport const isNetworkBootstrap = isPayloadOfSchemaType<NetworkBootstrap>(NetworkBootstrapSchema)\n\nexport const asOptionalNetwork = AsObjectFactory.createOptional(isNetworkBootstrap)\n","import type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nexport const NetworkStatusSchema = 'network.xyo.chain.status' as const\nexport type NetworkStatusSchema = typeof NetworkStatusSchema\n\nexport type NetworkStatusState = 'online' | 'offline' | 'degraded'\n\nexport type NetworkStatusUpdate = {\n end: number\n start: number\n update: string\n}\n\nexport interface NetworkStatusFields {\n description: string\n state: NetworkStatusState\n updates?: NetworkStatusUpdate[]\n}\n\nexport type NetworkStatus = Payload<NetworkStatusFields, NetworkStatusSchema>\n\nexport const isNetworkStatus = isPayloadOfSchemaType<NetworkStatus>(NetworkStatusSchema)\n","import {\n LocalNetworkIconString, MainNetworkIconString, SequenceNetworkIconString,\n} from '../images/index.ts'\nimport type { NetworkBootstrap } from '../models/index.ts'\nimport { NetworkBootstrapSchema } from '../models/index.ts'\n\nexport const MainNetwork: NetworkBootstrap = {\n description: 'Main Network for XYO Layer 1',\n icon: MainNetworkIconString,\n id: 'mainnet',\n name: 'Mainnet',\n schema: NetworkBootstrapSchema,\n symbol: 'XL1',\n url: 'https://api.chain.xyo.network',\n explorerUrl: 'https://explorer.xyo.network',\n statusUrl: 'https://xyo.network/chain-network-status-mainnet.json',\n}\n\nexport const SequenceNetwork: NetworkBootstrap = {\n description: 'Test Network for XYO Layer 1',\n icon: SequenceNetworkIconString,\n id: 'sequence',\n name: 'Sequence',\n schema: NetworkBootstrapSchema,\n symbol: 'XL1',\n url: 'https://beta.api.chain.xyo.network',\n explorerUrl: 'https://beta.explorer.xyo.network',\n statusUrl: 'https://beta.xyo.network/chain-network-status-sequence.json',\n}\n\nexport const LocalNetwork: NetworkBootstrap = {\n description: 'Local Node',\n icon: LocalNetworkIconString,\n id: 'local',\n name: 'Local',\n schema: NetworkBootstrapSchema,\n symbol: 'XL1',\n url: 'http://localhost:8080',\n explorerUrl: 'http://localhost:3000',\n // Useful for testing various network status updates\n statusUrl: 'http://localhost:3002/chain-network-status-local.json',\n}\n\nexport const DefaultNetworks: NetworkBootstrap[] = [MainNetwork, SequenceNetwork, LocalNetwork]\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'WalletNetwork', required)\n","import type { IconProps } from '@mui/material'\nimport { Icon } from '@mui/material'\nimport React from 'react'\n\nexport const NetworkIcon: React.FC<IconProps & { icon?: string }> = ({ icon, ...props }) => {\n return (\n <Icon\n sx={{\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\n }}\n ref={(ref) => {\n if (ref && icon !== undefined) {\n ref.innerHTML = icon\n }\n }}\n {...props}\n />\n )\n}\n","import type { MenuItemProps } from '@mui/material'\nimport { ListItemText } from '@mui/material'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport type { NetworkBootstrap } from '../../models/index.ts'\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: string) => void\n}\n\nexport const NetworkMenuItem: React.FC<NetworkMenuItemProps> = ({\n active, network, onClick, updateActiveNetwork, ...props\n}) => {\n const handleClick = (event: ReactMouseEvent<HTMLLIElement, MouseEvent>) => {\n if (network === undefined) throw new Error('Network is undefined')\n updateActiveNetwork?.(network.id)\n onClick?.(event)\n }\n\n return (\n <ActiveMenuItem\n title={network?.name}\n disableRipple\n onClick={handleClick}\n active={active}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} />\n <ListItemText>{network?.name}</ListItemText>\n </ActiveMenuItem>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button,\n} from '@mui/material'\nimport React, { useMemo, useState } from 'react'\n\nimport type { NetworkStatus } from '../../models/index.ts'\nimport { NetworkStatusDialog } from './Dialog.tsx'\n\nexport interface NetworkStatusAlertProps extends AlertProps {\n status?: NetworkStatus\n}\n\nexport const NetworkStatusAlert: React.FC<NetworkStatusAlertProps> = ({ status, ...props }) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n const severity = useMemo(() => {\n if (!status) return\n switch (status.state) {\n case 'online': {\n return 'success'\n }\n case 'offline': {\n return 'error'\n }\n case 'degraded': {\n return 'warning'\n }\n }\n }, [status])\n\n return (\n <Alert severity={severity} {...props}>\n <AlertTitle>{status?.description}</AlertTitle>\n {status?.updates && status.updates.length > 0 && (\n <>\n <Button color={severity} variant=\"outlined\" size=\"small\" onClick={() => setOpen(true)}>\n Updates\n </Button>\n <NetworkStatusDialog open={open} onClose={handleClose} updates={status.updates} />\n </>\n )}\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography,\n} from '@mui/material'\nimport React from 'react'\n\nimport type { NetworkStatusUpdate } from '../../models/index.ts'\n\nexport interface NetworkStatusDialogProps extends DialogProps {\n updates: NetworkStatusUpdate[]\n}\n\nexport const NetworkStatusDialog: React.FC<NetworkStatusDialogProps> = ({ updates, ...props }) => {\n return (\n <Dialog {...props}>\n <DialogTitle>Recent Status Updates</DialogTitle>\n <DialogContent>\n <List>\n {updates.map(({\n start, end, update,\n }) => (\n <ListItem\n key={start + update}\n sx={{\n flexDirection: 'column', alignItems: 'start', pl: 0,\n }}\n >\n <Typography>\n {update}\n </Typography>\n <Typography gutterBottom sx={{ opacity: 0.75, fontSize: '.8333rem' }}>\n Start:\n {' '}\n {new Date(start).toLocaleString()}\n {' '}\n <br />\n End:\n {' '}\n {new Date(end).toLocaleString()}\n </Typography>\n </ListItem>\n ))}\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={e => props.onClose?.(e, 'backdropClick')} color=\"primary\" variant=\"outlined\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","/* eslint-disable sonarjs/deprecation */\nimport { assertEx } from '@xylabs/assert'\nimport type { Address, Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Signed } from '@xyo-network/boundwitness-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport { initBridge } from '@xyo-network/chain-orchestration'\nimport { findMostRecentBlock, hydrateBlock } from '@xyo-network/chain-protocol'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type {\n AllowedBlockPayload,\n ChainInformation,\n HydratedBlock, SignedHydratedBlock, SignedHydratedTransaction, TransactionBoundWitness,\n TransactionFeesBigInt,\n XyoRunner,\n XyoSigner,\n XyoViewer,\n XyoWallet,\n} from '@xyo-network/xl1-protocol'\n\nexport const FINALIZED_ARCHIVIST = 'XYOChain:Chain:Finalized' as const\n\nexport interface NetworkProviderParams {\n chainInformation?: ChainInformation\n network: string\n}\n\n// TODO: change back to implementing XyoProvider which requires sub objects\n/**\n * @deprecated Use MemoryXyoProvider instead\n */\nexport class NetworkProvider implements XyoSigner, XyoViewer, XyoWallet, XyoRunner {\n private _bridge: BridgeInstance\n\n constructor(bridge: BridgeInstance) {\n this._bridge = bridge\n }\n\n private get bridge() {\n return assertEx(this._bridge, () => 'Bridge not set')\n }\n\n static async create({ network }: NetworkProviderParams): Promise<NetworkProvider> {\n const bridge = await initBridge(network)\n return new NetworkProvider(bridge)\n }\n\n accountBalance(_address: Address): Promisable<bigint> {\n throw new Error('Method not implemented.')\n }\n\n accounts(): Promisable<Address[]> {\n throw new Error('Method not implemented.')\n }\n\n addChain(_chain: Address, _name?: string): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n address(): Promisable<Address> {\n throw new Error('Method not implemented.')\n }\n\n blockByHash(_hash: Hash): Promisable<SignedHydratedBlock | null> {\n throw new Error('Method not implemented.')\n }\n\n blockByNumber(_blockNumber: number): Promisable<SignedHydratedBlock | null> {\n throw new Error('Method not implemented.')\n }\n\n blocksByHash(_hash: Hash, _limit?: number): Promisable<SignedHydratedBlock[]> {\n throw new Error('Method not implemented.')\n }\n\n broadcastTransaction(_transaction: SignedHydratedTransaction): Promisable<Hash> {\n throw new Error('Method not implemented.')\n }\n\n chain(): Promisable<Address> {\n throw new Error('Method not implemented.')\n }\n\n chainId(): Promisable<Address> {\n throw new Error('Method not implemented.')\n }\n\n chains(): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n createSignedTransaction(\n _chain: Address,\n _elevatedPayloads: AllowedBlockPayload[],\n _additionalPayloads: Payload[],\n _nbf: number,\n _exp: number,\n _fees: TransactionFeesBigInt,\n _from?: Address,\n ): Promisable<Signed<TransactionBoundWitness>> {\n throw new Error('Method not implemented.')\n }\n\n currentBlock(): Promisable<SignedHydratedBlock> {\n throw new Error('Method not implemented.')\n }\n\n currentBlockHash(): Promisable<Hash> {\n throw new Error('Method not implemented.')\n }\n\n currentBlockNumber(): Promisable<number> {\n throw new Error('Method not implemented.')\n }\n\n permissions(): Promisable<Record<string, object>> {\n throw new Error('Method not implemented.')\n }\n\n async previousBlocks(startingBlock?: Hash, count = 25): Promise<HydratedBlock[]> {\n const chainArchivist = await this.getFinalizedArchivist()\n const head = assertEx(await findMostRecentBlock(chainArchivist, { cursor: startingBlock }), () => 'Unable to find most recent block')\n const iterator = await XyoChainBlockNumberIterator.create({ chainArchivist, head })\n const blocks = await iterator.previous(head.block, count)\n\n let hydratedBlocks: HydratedBlock[] = []\n for (const block of blocks) {\n hydratedBlocks.push(await hydrateBlock(chainArchivist, await PayloadBuilder.hash(block)))\n }\n return hydratedBlocks\n }\n\n requestPermissions(_permissions: object): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n revokePermissions(_permissions: object): Promisable<object> {\n throw new Error('Method not implemented.')\n }\n\n signTransaction(_transaction: TransactionBoundWitness): Promisable<Signed<TransactionBoundWitness>> {\n throw new Error('Method not implemented.')\n }\n\n switchChain(_chain: Address): Promisable<void> {\n throw new Error('Method not implemented.')\n }\n\n transactionByBlockHashAndIndex(_blockHash: Hash, _transactionIndex: number): Promisable<SignedHydratedTransaction | null> {\n throw new Error('Method not implemented.')\n }\n\n transactionByBlockNumberAndIndex(_blockNumber: number, _transactionIndex: number): Promisable<SignedHydratedTransaction | null> {\n throw new Error('Method not implemented.')\n }\n\n transactionByHash(_transactionHash: Hash): Promisable<SignedHydratedTransaction | null> {\n throw new Error('Method not implemented.')\n }\n\n private async getFinalizedArchivist(): Promise<ArchivistInstance> {\n const bridge = this.bridge\n const mod = assertEx(await bridge.resolve(FINALIZED_ARCHIVIST), () => `${FINALIZED_ARCHIVIST} not found`)\n return assertEx(asArchivistInstance(mod), () => `${FINALIZED_ARCHIVIST} is not an archivist`)\n }\n}\n"],"mappings":"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","names":["Avatar","React","createContextEx","ChainNetworkContext","ErrorRender","usePromise","React","useCallback","useMemo","useState","networkNodeMap","Map","getNetworkNodes","ManifestWrapper","ModuleFactoryLocator","HDWallet","NetworkNodeManifest","node","getNetworkNode","wrapper","ManifestWrapper","NetworkNodeManifest","HDWallet","random","ModuleFactoryLocator","node","loadNodes","initNetworkNode","activeNetwork","networkNodeMap","getNetworkNodes","has","url","get","activeNetworkNode","getNetworkNode","set","SvgIcon","React","LocalNetworkSvg","LocalNetworkIconString","default","SvgIcon","React","MainNetworkSvg","MainNetworkIconString","default","SvgIcon","React","SequenceNetworkSvg","SequenceNetworkIconString","default","AsObjectFactory","isPayloadOfSchemaType","NetworkBootstrapSchema","isNetworkBootstrap","asOptionalNetwork","createOptional","isPayloadOfSchemaType","NetworkStatusSchema","isNetworkStatus","MainNetwork","description","icon","MainNetworkIconString","id","name","schema","NetworkBootstrapSchema","symbol","url","explorerUrl","statusUrl","SequenceNetwork","SequenceNetworkIconString","LocalNetwork","LocalNetworkIconString","DefaultNetworks","ChainNetworkProvider","children","getActiveNetwork","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","SequenceNetwork","useMemo","updateActiveNetwork","useCallback","networkId","undefined","value","provided","walletNetworkError","React","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","Icon","React","NetworkIcon","icon","props","React","Icon","sx","display","alignItems","justifyContent","ref","undefined","innerHTML","NetworkAvatar","icon","name","props","React","Avatar","sx","backgroundColor","height","width","alt","NetworkIcon","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","NetworkAvatar","icon","ListItemText","Alert","AlertTitle","Button","React","useMemo","useState","Button","Dialog","DialogActions","DialogContent","DialogTitle","List","ListItem","Typography","React","NetworkStatusDialog","updates","props","React","Dialog","DialogTitle","DialogContent","List","map","start","end","update","ListItem","key","sx","flexDirection","alignItems","pl","Typography","gutterBottom","opacity","fontSize","Date","toLocaleString","br","DialogActions","Button","onClick","e","onClose","color","variant","NetworkStatusAlert","status","props","open","setOpen","useState","handleClose","severity","useMemo","state","React","Alert","AlertTitle","description","updates","length","Button","color","variant","size","onClick","NetworkStatusDialog","onClose","assertEx","asArchivistInstance","initBridge","findMostRecentBlock","hydrateBlock","XyoChainBlockNumberIterator","PayloadBuilder","FINALIZED_ARCHIVIST","NetworkProvider","_bridge","constructor","bridge","assertEx","create","network","initBridge","accountBalance","_address","Error","accounts","addChain","_chain","_name","address","blockByHash","_hash","blockByNumber","_blockNumber","blocksByHash","_limit","broadcastTransaction","_transaction","chain","chainId","chains","createSignedTransaction","_elevatedPayloads","_additionalPayloads","_nbf","_exp","_fees","_from","currentBlock","currentBlockHash","currentBlockNumber","permissions","previousBlocks","startingBlock","count","chainArchivist","getFinalizedArchivist","head","findMostRecentBlock","cursor","iterator","XyoChainBlockNumberIterator","blocks","previous","block","hydratedBlocks","push","hydrateBlock","PayloadBuilder","hash","requestPermissions","_permissions","revokePermissions","signTransaction","switchChain","transactionByBlockHashAndIndex","_blockHash","_transactionIndex","transactionByBlockNumberAndIndex","transactionByHash","_transactionHash","mod","resolve","asArchivistInstance"]}
@@ -1,2 +1,3 @@
1
1
  export * from './menu/index.ts';
2
+ export * from './status/index.ts';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { AlertProps } from '@mui/material';
2
+ import React from 'react';
3
+ import type { NetworkStatus } from '../../models/index.ts';
4
+ export interface NetworkStatusAlertProps extends AlertProps {
5
+ status?: NetworkStatus;
6
+ }
7
+ export declare const NetworkStatusAlert: React.FC<NetworkStatusAlertProps>;
8
+ //# sourceMappingURL=Alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../../src/components/status/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI/C,OAAO,KAA4B,MAAM,OAAO,CAAA;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAG1D,MAAM,WAAW,uBAAwB,SAAQ,UAAU;IACzD,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAgChE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { DialogProps } from '@mui/material';
2
+ import React from 'react';
3
+ import type { NetworkStatusUpdate } from '../../models/index.ts';
4
+ export interface NetworkStatusDialogProps extends DialogProps {
5
+ updates: NetworkStatusUpdate[];
6
+ }
7
+ export declare const NetworkStatusDialog: React.FC<NetworkStatusDialogProps>;
8
+ //# sourceMappingURL=Dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/status/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,OAAO,EAAE,mBAAmB,EAAE,CAAA;CAC/B;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAuClE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './Alert.tsx';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/status/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA"}
@@ -1,3 +1,23 @@
1
- import type { ChainNetworkState } from './state.ts';
2
- export declare const ChainNetworkContext: import("react").Context<ChainNetworkState & import("@xylabs/react-shared").ContextExState>;
1
+ export declare const ChainNetworkContext: import("react").Context<({
2
+ activeNetwork?: import("../../index.ts").NetworkBootstrap;
3
+ networks?: import("../../index.ts").NetworkBootstrap[];
4
+ updateActiveNetwork?: (networkId: import("../../index.ts").NetworkBootstrap["id"]) => void;
5
+ walletNetworkError?: Error;
6
+ } & {
7
+ provided: true;
8
+ }) | (import("@xylabs/react-shared").FixedValues<import("@xylabs/react-shared").ProvidedContextExState<{
9
+ activeNetwork?: import("../../index.ts").NetworkBootstrap;
10
+ networks?: import("../../index.ts").NetworkBootstrap[];
11
+ updateActiveNetwork?: (networkId: import("../../index.ts").NetworkBootstrap["id"]) => void;
12
+ walletNetworkError?: Error;
13
+ }>, never> & {
14
+ provided: false;
15
+ }) | (import("@xylabs/react-shared").FixedValues<import("@xylabs/react-shared").NotProvidedContextExState<{
16
+ activeNetwork?: import("../../index.ts").NetworkBootstrap;
17
+ networks?: import("../../index.ts").NetworkBootstrap[];
18
+ updateActiveNetwork?: (networkId: import("../../index.ts").NetworkBootstrap["id"]) => void;
19
+ walletNetworkError?: Error;
20
+ }>, never> & {
21
+ provided: false;
22
+ })>;
3
23
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/context/network/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,mBAAmB,4FAAuC,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/context/network/context.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;GAAuC,CAAA"}
@@ -1,9 +1,9 @@
1
- import type { ContextExState } from '@xyo-network/react-shared';
1
+ import type { ContextExState } from '@xylabs/react-shared';
2
2
  import type { NetworkBootstrap } from '../../models/index.ts';
3
- export interface ChainNetworkState extends ContextExState {
3
+ export type ChainNetworkState = ContextExState<{
4
4
  activeNetwork?: NetworkBootstrap;
5
5
  networks?: NetworkBootstrap[];
6
6
  updateActiveNetwork?: (networkId: NetworkBootstrap['id']) => void;
7
7
  walletNetworkError?: Error;
8
- }
8
+ }>;
9
9
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/context/network/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;IACjE,kBAAkB,CAAC,EAAE,KAAK,CAAA;CAC3B"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/context/network/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;IAC7C,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;IACjE,kBAAkB,CAAC,EAAE,KAAK,CAAA;CAC3B,CAAC,CAAA"}
@@ -1,2 +1,9 @@
1
- export declare const useChainNetwork: (required?: boolean) => Omit<import("./state.ts").ChainNetworkState & import("@xylabs/react-shared").ContextExState, "provided">;
1
+ export declare const useChainNetwork: (required?: boolean) => Omit<{
2
+ activeNetwork?: import("../../index.ts").NetworkBootstrap;
3
+ networks?: import("../../index.ts").NetworkBootstrap[];
4
+ updateActiveNetwork?: (networkId: import("../../index.ts").NetworkBootstrap["id"]) => void;
5
+ walletNetworkError?: Error;
6
+ } & {
7
+ provided: true;
8
+ }, "provided"> | Omit<import("@xylabs/react-shared").NotProvidedContextExState<import("./state.ts").ChainNetworkState>, "provided">;
2
9
  //# sourceMappingURL=use.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../../src/context/network/use.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,GAAI,kBAAe,6GAAiE,CAAA"}
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../../src/context/network/use.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,GAAI,kBAAe;;;;;;;mIAAiE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Networks.d.ts","sourceRoot":"","sources":["../../../src/helpers/Networks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG1D,eAAO,MAAM,WAAW,EAAE,gBAQzB,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,gBAQ7B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,gBAQ1B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,gBAAgB,EAAiD,CAAA"}
1
+ {"version":3,"file":"Networks.d.ts","sourceRoot":"","sources":["../../../src/helpers/Networks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAG1D,eAAO,MAAM,WAAW,EAAE,gBAUzB,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,gBAU7B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,gBAW1B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,gBAAgB,EAAiD,CAAA"}
@@ -6,7 +6,5 @@ export declare const getNetworkNode: () => Promise<import("@xyo-network/node-mem
6
6
  config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/node-model").NodeConfig>;
7
7
  ephemeralQueryAccountEnabled?: boolean;
8
8
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
9
- privateChildren?: import("@xyo-network/module-model").ModuleInstance[];
10
- publicChildren?: import("@xyo-network/module-model").ModuleInstance[];
11
- }, import("@xyo-network/node-model").NodeModuleEventData>>;
9
+ } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/node-model").NodeModuleEventData>>;
12
10
  //# sourceMappingURL=getNetworkNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getNetworkNode.d.ts","sourceRoot":"","sources":["../../../src/helpers/getNetworkNode.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc;;;;;;;;;;0DAI1B,CAAA"}
1
+ {"version":3,"file":"getNetworkNode.d.ts","sourceRoot":"","sources":["../../../src/helpers/getNetworkNode.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc;;;;;;;;qHAI1B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { AttachableNodeInstance } from '@xyo-network/node-model';
2
- export declare const getBridgedNodes: () => Map<string, AttachableNodeInstance<import("@xylabs/base").BaseParamsFields & {
2
+ export declare const getNetworkNodes: () => Map<string, AttachableNodeInstance<import("@xylabs/base").BaseParamsFields & {
3
3
  account?: import("@xyo-network/account-model").AccountInstance | "random";
4
4
  addToResolvers?: boolean;
5
5
  additionalSigners?: import("@xyo-network/account-model").AccountInstance[];
@@ -7,7 +7,5 @@ export declare const getBridgedNodes: () => Map<string, AttachableNodeInstance<i
7
7
  config: import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/node-model").NodeConfig>;
8
8
  ephemeralQueryAccountEnabled?: boolean;
9
9
  moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
10
- privateChildren?: import("@xyo-network/module-model").ModuleInstance[];
11
- publicChildren?: import("@xyo-network/module-model").ModuleInstance[];
12
- }, import("@xyo-network/node-model").NodeModuleEventData>>;
13
- //# sourceMappingURL=getBridgedNodes.d.ts.map
10
+ } & import("@xyo-network/module-model").ModuleChildrenParams, import("@xyo-network/node-model").NodeModuleEventData>>;
11
+ //# sourceMappingURL=getNetworkNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNetworkNodes.d.ts","sourceRoot":"","sources":["../../../src/helpers/getNetworkNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAIrE,eAAO,MAAM,eAAe;;;;;;;;qHAE3B,CAAA"}
@@ -1,4 +1,4 @@
1
- export * from './getBridgedNodes.ts';
1
+ export * from './getNetworkNodes.ts';
2
2
  export * from './initNetworkNode.ts';
3
3
  export * from './Networks.ts';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initNetworkNode.d.ts","sourceRoot":"","sources":["../../../src/helpers/initNetworkNode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAI1D,eAAO,MAAM,eAAe,GAAU,eAAe,gBAAgB,KAAG,OAAO,CAAC,sBAAsB,CAWrG,CAAA"}
1
+ {"version":3,"file":"initNetworkNode.d.ts","sourceRoot":"","sources":["../../../src/helpers/initNetworkNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAI1D,eAAO,MAAM,eAAe,GAAU,eAAe,gBAAgB,KAAG,OAAO,CAAC,sBAAsB,CAQrG,CAAA"}
@@ -14,6 +14,8 @@ export interface ChainForkFields {
14
14
  export interface NetworkFields {
15
15
  /** Description of the network */
16
16
  description: string;
17
+ /** Url for accessing the network explorer */
18
+ explorerUrl?: string;
17
19
  /** string representation of the icon (svg) */
18
20
  icon?: string;
19
21
  /** Machine-readable identifier */
@@ -21,6 +23,8 @@ export interface NetworkFields {
21
23
  /** Human-readable identifier */
22
24
  name: string;
23
25
  schema: NetworkBootstrapSchema;
26
+ /** Url for the json file for current NetworkStatus payload */
27
+ statusUrl?: string;
24
28
  /** Symbol of the network */
25
29
  symbol?: string;
26
30
  /** Url for accessing the network */
@@ -1 +1 @@
1
- {"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../../../src/models/Bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,eAAO,MAAM,sBAAsB,EAAG,+BAAwC,CAAA;AAC9E,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAA;AAElE,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kCAAkC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,oFAAoF;AACpF,MAAM,WAAW,sBAAuB,SAAQ,aAAa,EAAE,eAAe;IAC5E,wDAAwD;IACxD,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED,MAAM,WAAW,OAAQ,SAAQ,gBAAgB;IAC/C,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;AAEtF,eAAO,MAAM,kBAAkB,+CAAkE,CAAA;AAEjG,eAAO,MAAM,iBAAiB,uGAAqD,CAAA"}
1
+ {"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../../../src/models/Bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,eAAO,MAAM,sBAAsB,EAAG,+BAAwC,CAAA;AAC9E,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAA;AAElE,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kCAAkC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,oFAAoF;AACpF,MAAM,WAAW,sBAAuB,SAAQ,aAAa,EAAE,eAAe;IAC5E,wDAAwD;IACxD,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAC7B;AAED,MAAM,WAAW,OAAQ,SAAQ,gBAAgB;IAC/C,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;AAEtF,eAAO,MAAM,kBAAkB,+CAAkE,CAAA;AAEjG,eAAO,MAAM,iBAAiB,uGAAqD,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Payload } from '@xyo-network/payload-model';
2
+ export declare const NetworkStatusSchema: "network.xyo.chain.status";
3
+ export type NetworkStatusSchema = typeof NetworkStatusSchema;
4
+ export type NetworkStatusState = 'online' | 'offline' | 'degraded';
5
+ export type NetworkStatusUpdate = {
6
+ end: number;
7
+ start: number;
8
+ update: string;
9
+ };
10
+ export interface NetworkStatusFields {
11
+ description: string;
12
+ state: NetworkStatusState;
13
+ updates?: NetworkStatusUpdate[];
14
+ }
15
+ export type NetworkStatus = Payload<NetworkStatusFields, NetworkStatusSchema>;
16
+ export declare const isNetworkStatus: (x?: unknown | null) => x is NetworkStatus;
17
+ //# sourceMappingURL=NetworkStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkStatus.d.ts","sourceRoot":"","sources":["../../../src/models/NetworkStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,eAAO,MAAM,mBAAmB,EAAG,0BAAmC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA;AAE5D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;AAElE,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,kBAAkB,CAAA;IACzB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAChC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAA;AAE7E,eAAO,MAAM,eAAe,4CAA4D,CAAA"}
@@ -1,2 +1,3 @@
1
1
  export * from './Bootstrap.ts';
2
+ export * from './NetworkStatus.ts';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/react-chain-network",
4
- "version": "1.3.17",
4
+ "version": "1.3.19",
5
5
  "description": "XYO Layer One React SDK",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -38,42 +38,42 @@
38
38
  "start": "storybook dev -p 6006"
39
39
  },
40
40
  "dependencies": {
41
- "@xylabs/assert": "^4.9.3",
42
- "@xylabs/hex": "^4.9.3",
43
- "@xylabs/object": "^4.9.3",
44
- "@xylabs/promise": "^4.9.3",
45
- "@xylabs/react-error": "^6.2.19",
46
- "@xylabs/react-promise": "^6.2.19",
47
- "@xylabs/react-shared": "^6.2.19",
48
- "@xyo-network/archivist-model": "^3.14.17",
49
- "@xyo-network/boundwitness-model": "^3.14.17",
50
- "@xyo-network/bridge-model": "^3.14.17",
51
- "@xyo-network/chain-orchestration": "^1.3.17",
52
- "@xyo-network/chain-protocol": "^1.3.17",
53
- "@xyo-network/chain-services": "^1.3.17",
54
- "@xyo-network/manifest-model": "^3.14.17",
55
- "@xyo-network/manifest-wrapper": "^3.14.17",
56
- "@xyo-network/module-factory-locator": "^3.14.17",
57
- "@xyo-network/node-model": "^3.14.17",
58
- "@xyo-network/payload-builder": "^3.14.17",
59
- "@xyo-network/payload-model": "^3.14.17",
60
- "@xyo-network/react-chain-shared": "^1.3.17",
61
- "@xyo-network/react-shared": "^5.2.8",
62
- "@xyo-network/wallet": "^3.14.17",
63
- "@xyo-network/xl1-protocol": "^1.3.12"
41
+ "@xylabs/assert": "^4.9.15",
42
+ "@xylabs/hex": "^4.9.15",
43
+ "@xylabs/object": "^4.9.15",
44
+ "@xylabs/promise": "^4.9.15",
45
+ "@xylabs/react-error": "^6.3.1",
46
+ "@xylabs/react-promise": "^6.3.1",
47
+ "@xylabs/react-shared": "^6.3.1",
48
+ "@xyo-network/archivist-model": "^3.15.5",
49
+ "@xyo-network/boundwitness-model": "^3.15.5",
50
+ "@xyo-network/bridge-model": "^3.15.5",
51
+ "@xyo-network/chain-orchestration": "^1.3.19",
52
+ "@xyo-network/chain-protocol": "^1.3.19",
53
+ "@xyo-network/chain-services": "^1.3.19",
54
+ "@xyo-network/manifest-model": "^3.15.5",
55
+ "@xyo-network/manifest-wrapper": "^3.15.5",
56
+ "@xyo-network/module-factory-locator": "^3.15.5",
57
+ "@xyo-network/node-model": "^3.15.5",
58
+ "@xyo-network/payload-builder": "^3.15.5",
59
+ "@xyo-network/payload-model": "^3.15.5",
60
+ "@xyo-network/react-chain-shared": "^1.3.19",
61
+ "@xyo-network/react-shared": "^5.3.2",
62
+ "@xyo-network/wallet": "^3.15.5",
63
+ "@xyo-network/xl1-protocol": "^1.3.13"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@emotion/react": "^11.14.0",
67
67
  "@emotion/styled": "^11.14.0",
68
68
  "@mui/icons-material": "^7.1.0",
69
69
  "@mui/material": "^7.1.0",
70
- "@types/react": "^19.1.3",
70
+ "@types/react": "^19.1.4",
71
71
  "@xylabs/ts-scripts-yarn3": "^6.5.5",
72
72
  "@xylabs/tsconfig-react": "^6.5.5",
73
- "knip": "^5.54.1",
73
+ "knip": "^5.55.1",
74
74
  "react": "^19.1.0",
75
75
  "react-dom": "^19.1.0",
76
- "react-router-dom": "^7.5.3",
76
+ "react-router-dom": "^7.6.0",
77
77
  "typescript": "^5.8.3"
78
78
  },
79
79
  "peerDependencies": {
@@ -1 +1,2 @@
1
1
  export * from './menu/index.ts'
2
+ export * from './status/index.ts'
@@ -0,0 +1,65 @@
1
+ import type { Meta, StoryFn } from '@storybook/react'
2
+ import React from 'react'
3
+
4
+ import { type NetworkStatus, NetworkStatusSchema } from '../../models/index.ts'
5
+ import { NetworkStatusAlert } from './Alert.tsx'
6
+
7
+ const exampleOnlineStatus: NetworkStatus = {
8
+ state: 'online',
9
+ schema: NetworkStatusSchema,
10
+ description: 'The network is online and functioning normally.',
11
+ }
12
+
13
+ const exampleOfflineStatus: NetworkStatus = {
14
+ state: 'offline',
15
+ schema: NetworkStatusSchema,
16
+ description: 'The network is offline and not functioning.',
17
+ updates: [
18
+ {
19
+ start: Date.now() - 1000 * 60 * 60,
20
+ end: Date.now(),
21
+ update: 'The network was offline for 1 hour.',
22
+ },
23
+ ],
24
+ }
25
+
26
+ const exampleDegradedStatus: NetworkStatus = {
27
+ state: 'degraded',
28
+ schema: NetworkStatusSchema,
29
+ description: 'The network is degraded and may be experiencing issues.',
30
+ updates: [
31
+ {
32
+ start: Date.now() - 1000 * 60 * 60,
33
+ end: Date.now(),
34
+ update: 'Blocks are being produced, but some nodes are offline.',
35
+ },
36
+ {
37
+ start: Date.now() - 1000 * 60 * 60,
38
+ end: Date.now(),
39
+ update: 'Blocks are being produced, but some nodes are offline.',
40
+ },
41
+ ],
42
+ }
43
+
44
+ export default {
45
+ title: 'Network/Status/Alert',
46
+ component: NetworkStatusAlert,
47
+ } as Meta
48
+
49
+ const Template: StoryFn<typeof NetworkStatusAlert> = args => <NetworkStatusAlert {...args} />
50
+
51
+ const Default = Template.bind({})
52
+ Default.args = {}
53
+
54
+ const WithOnlineStatus = Template.bind({})
55
+ WithOnlineStatus.args = { status: exampleOnlineStatus }
56
+
57
+ const WithOfflineStatus = Template.bind({})
58
+ WithOfflineStatus.args = { status: exampleOfflineStatus }
59
+
60
+ const WithDegradedStatus = Template.bind({})
61
+ WithDegradedStatus.args = { status: exampleDegradedStatus }
62
+
63
+ export {
64
+ Default, WithDegradedStatus, WithOfflineStatus, WithOnlineStatus,
65
+ }
@@ -0,0 +1,46 @@
1
+ import type { AlertProps } from '@mui/material'
2
+ import {
3
+ Alert, AlertTitle, Button,
4
+ } from '@mui/material'
5
+ import React, { useMemo, useState } from 'react'
6
+
7
+ import type { NetworkStatus } from '../../models/index.ts'
8
+ import { NetworkStatusDialog } from './Dialog.tsx'
9
+
10
+ export interface NetworkStatusAlertProps extends AlertProps {
11
+ status?: NetworkStatus
12
+ }
13
+
14
+ export const NetworkStatusAlert: React.FC<NetworkStatusAlertProps> = ({ status, ...props }) => {
15
+ const [open, setOpen] = useState(false)
16
+ const handleClose = () => setOpen(false)
17
+
18
+ const severity = useMemo(() => {
19
+ if (!status) return
20
+ switch (status.state) {
21
+ case 'online': {
22
+ return 'success'
23
+ }
24
+ case 'offline': {
25
+ return 'error'
26
+ }
27
+ case 'degraded': {
28
+ return 'warning'
29
+ }
30
+ }
31
+ }, [status])
32
+
33
+ return (
34
+ <Alert severity={severity} {...props}>
35
+ <AlertTitle>{status?.description}</AlertTitle>
36
+ {status?.updates && status.updates.length > 0 && (
37
+ <>
38
+ <Button color={severity} variant="outlined" size="small" onClick={() => setOpen(true)}>
39
+ Updates
40
+ </Button>
41
+ <NetworkStatusDialog open={open} onClose={handleClose} updates={status.updates} />
42
+ </>
43
+ )}
44
+ </Alert>
45
+ )
46
+ }
@@ -0,0 +1,52 @@
1
+ import type { DialogProps } from '@mui/material'
2
+ import {
3
+ Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography,
4
+ } from '@mui/material'
5
+ import React from 'react'
6
+
7
+ import type { NetworkStatusUpdate } from '../../models/index.ts'
8
+
9
+ export interface NetworkStatusDialogProps extends DialogProps {
10
+ updates: NetworkStatusUpdate[]
11
+ }
12
+
13
+ export const NetworkStatusDialog: React.FC<NetworkStatusDialogProps> = ({ updates, ...props }) => {
14
+ return (
15
+ <Dialog {...props}>
16
+ <DialogTitle>Recent Status Updates</DialogTitle>
17
+ <DialogContent>
18
+ <List>
19
+ {updates.map(({
20
+ start, end, update,
21
+ }) => (
22
+ <ListItem
23
+ key={start + update}
24
+ sx={{
25
+ flexDirection: 'column', alignItems: 'start', pl: 0,
26
+ }}
27
+ >
28
+ <Typography>
29
+ {update}
30
+ </Typography>
31
+ <Typography gutterBottom sx={{ opacity: 0.75, fontSize: '.8333rem' }}>
32
+ Start:
33
+ {' '}
34
+ {new Date(start).toLocaleString()}
35
+ {' '}
36
+ <br />
37
+ End:
38
+ {' '}
39
+ {new Date(end).toLocaleString()}
40
+ </Typography>
41
+ </ListItem>
42
+ ))}
43
+ </List>
44
+ </DialogContent>
45
+ <DialogActions>
46
+ <Button onClick={e => props.onClose?.(e, 'backdropClick')} color="primary" variant="outlined">
47
+ Close
48
+ </Button>
49
+ </DialogActions>
50
+ </Dialog>
51
+ )
52
+ }
@@ -0,0 +1 @@
1
+ export * from './Alert.tsx'
@@ -57,7 +57,7 @@ export const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({
57
57
  void setActiveNetworkExternal?.(networkId)
58
58
  }, [networks])
59
59
 
60
- const value = useMemo<ChainNetworkState>(() => ({
60
+ const value: ChainNetworkState = useMemo(() => ({
61
61
  activeNetwork,
62
62
  networks,
63
63
  provided: true,
@@ -1,10 +1,10 @@
1
- import type { ContextExState } from '@xyo-network/react-shared'
1
+ import type { ContextExState } from '@xylabs/react-shared'
2
2
 
3
3
  import type { NetworkBootstrap } from '../../models/index.ts'
4
4
 
5
- export interface ChainNetworkState extends ContextExState {
5
+ export type ChainNetworkState = ContextExState<{
6
6
  activeNetwork?: NetworkBootstrap
7
7
  networks?: NetworkBootstrap[]
8
8
  updateActiveNetwork?: (networkId: NetworkBootstrap['id']) => void
9
9
  walletNetworkError?: Error
10
- }
10
+ }>
@@ -12,6 +12,8 @@ export const MainNetwork: NetworkBootstrap = {
12
12
  schema: NetworkBootstrapSchema,
13
13
  symbol: 'XL1',
14
14
  url: 'https://api.chain.xyo.network',
15
+ explorerUrl: 'https://explorer.xyo.network',
16
+ statusUrl: 'https://xyo.network/chain-network-status-mainnet.json',
15
17
  }
16
18
 
17
19
  export const SequenceNetwork: NetworkBootstrap = {
@@ -22,6 +24,8 @@ export const SequenceNetwork: NetworkBootstrap = {
22
24
  schema: NetworkBootstrapSchema,
23
25
  symbol: 'XL1',
24
26
  url: 'https://beta.api.chain.xyo.network',
27
+ explorerUrl: 'https://beta.explorer.xyo.network',
28
+ statusUrl: 'https://beta.xyo.network/chain-network-status-sequence.json',
25
29
  }
26
30
 
27
31
  export const LocalNetwork: NetworkBootstrap = {
@@ -32,6 +36,9 @@ export const LocalNetwork: NetworkBootstrap = {
32
36
  schema: NetworkBootstrapSchema,
33
37
  symbol: 'XL1',
34
38
  url: 'http://localhost:8080',
39
+ explorerUrl: 'http://localhost:3000',
40
+ // Useful for testing various network status updates
41
+ statusUrl: 'http://localhost:3002/chain-network-status-local.json',
35
42
  }
36
43
 
37
44
  export const DefaultNetworks: NetworkBootstrap[] = [MainNetwork, SequenceNetwork, LocalNetwork]
@@ -0,0 +1,7 @@
1
+ import type { AttachableNodeInstance } from '@xyo-network/node-model'
2
+
3
+ const networkNodeMap = new Map<string, AttachableNodeInstance>()
4
+
5
+ export const getNetworkNodes = () => {
6
+ return networkNodeMap
7
+ }
@@ -1,3 +1,3 @@
1
- export * from './getBridgedNodes.ts'
1
+ export * from './getNetworkNodes.ts'
2
2
  export * from './initNetworkNode.ts'
3
3
  export * from './Networks.ts'
@@ -1,19 +1,15 @@
1
- import { initBridge } from '@xyo-network/chain-orchestration'
2
1
  import type { AttachableNodeInstance } from '@xyo-network/node-model'
3
2
 
4
3
  import type { NetworkBootstrap } from '../models/index.ts'
5
- import { getBridgedNodes } from './getBridgedNodes.ts'
6
4
  import { getNetworkNode } from './getNetworkNode.ts'
5
+ import { getNetworkNodes } from './getNetworkNodes.ts'
7
6
 
8
7
  export const initNetworkNode = async (activeNetwork: NetworkBootstrap): Promise<AttachableNodeInstance> => {
9
- const bridgedNodeMap = getBridgedNodes()
10
- if (bridgedNodeMap.has(activeNetwork.url)) return bridgedNodeMap.get(activeNetwork.url)!
8
+ const networkNodeMap = getNetworkNodes()
9
+ if (networkNodeMap.has(activeNetwork.url)) return networkNodeMap.get(activeNetwork.url)!
11
10
 
12
- const bridge = await initBridge(activeNetwork.url)
13
11
  const activeNetworkNode = await getNetworkNode()
14
- await activeNetworkNode.register?.(bridge)
15
- await activeNetworkNode.attach?.(bridge.address, true)
16
- bridgedNodeMap.set(activeNetwork.url, activeNetworkNode)
12
+ networkNodeMap.set(activeNetwork.url, activeNetworkNode)
17
13
 
18
14
  return activeNetworkNode
19
15
  }
@@ -19,6 +19,8 @@ export interface ChainForkFields {
19
19
  export interface NetworkFields {
20
20
  /** Description of the network */
21
21
  description: string
22
+ /** Url for accessing the network explorer */
23
+ explorerUrl?: string
22
24
  /** string representation of the icon (svg) */
23
25
  icon?: string
24
26
  /** Machine-readable identifier */
@@ -26,6 +28,8 @@ export interface NetworkFields {
26
28
  /** Human-readable identifier */
27
29
  name: string
28
30
  schema: NetworkBootstrapSchema
31
+ /** Url for the json file for current NetworkStatus payload */
32
+ statusUrl?: string
29
33
  /** Symbol of the network */
30
34
  symbol?: string
31
35
  /** Url for accessing the network */
@@ -0,0 +1,23 @@
1
+ import type { Payload } from '@xyo-network/payload-model'
2
+ import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
3
+
4
+ export const NetworkStatusSchema = 'network.xyo.chain.status' as const
5
+ export type NetworkStatusSchema = typeof NetworkStatusSchema
6
+
7
+ export type NetworkStatusState = 'online' | 'offline' | 'degraded'
8
+
9
+ export type NetworkStatusUpdate = {
10
+ end: number
11
+ start: number
12
+ update: string
13
+ }
14
+
15
+ export interface NetworkStatusFields {
16
+ description: string
17
+ state: NetworkStatusState
18
+ updates?: NetworkStatusUpdate[]
19
+ }
20
+
21
+ export type NetworkStatus = Payload<NetworkStatusFields, NetworkStatusSchema>
22
+
23
+ export const isNetworkStatus = isPayloadOfSchemaType<NetworkStatus>(NetworkStatusSchema)
@@ -1 +1,2 @@
1
1
  export * from './Bootstrap.ts'
2
+ export * from './NetworkStatus.ts'
@@ -1 +0,0 @@
1
- {"version":3,"file":"getBridgedNodes.d.ts","sourceRoot":"","sources":["../../../src/helpers/getBridgedNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAIrE,eAAO,MAAM,eAAe;;;;;;;;;;0DAE3B,CAAA"}
@@ -1,7 +0,0 @@
1
- import type { AttachableNodeInstance } from '@xyo-network/node-model'
2
-
3
- const bridgedNodeMap = new Map<string, AttachableNodeInstance>()
4
-
5
- export const getBridgedNodes = () => {
6
- return bridgedNodeMap
7
- }