@xyo-network/react-chain-network 1.20.1 → 1.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/browser/context/ActiveGatewayProvider.d.ts +8 -0
  2. package/dist/browser/context/ActiveGatewayProvider.d.ts.map +1 -0
  3. package/dist/browser/context/index.d.ts +1 -0
  4. package/dist/browser/context/index.d.ts.map +1 -1
  5. package/dist/browser/hooks/provider/useActiveNetworkCurrentBlock.d.ts.map +1 -1
  6. package/dist/browser/hooks/provider/useActiveNetworkNetwork.d.ts.map +1 -1
  7. package/dist/browser/hooks/provider/useActiveNetworkRunner.d.ts.map +1 -1
  8. package/dist/browser/hooks/provider/useViewerInPage.d.ts +1 -0
  9. package/dist/browser/hooks/provider/useViewerInPage.d.ts.map +1 -1
  10. package/dist/browser/hooks/provider/useViewerInWallet.d.ts +1 -0
  11. package/dist/browser/hooks/provider/useViewerInWallet.d.ts.map +1 -1
  12. package/dist/browser/index.mjs +95 -64
  13. package/dist/browser/index.mjs.map +1 -1
  14. package/package.json +19 -19
  15. package/src/context/ActiveGatewayProvider.tsx +19 -0
  16. package/src/context/index.ts +1 -0
  17. package/src/hooks/provider/UseViewerInPage.stories.tsx +5 -24
  18. package/src/hooks/provider/UseViewerInPageV2.stories.tsx +135 -0
  19. package/src/hooks/provider/useActiveNetworkCurrentBlock.ts +2 -0
  20. package/src/hooks/provider/useActiveNetworkNetwork.ts +1 -0
  21. package/src/hooks/provider/useActiveNetworkRunner.ts +1 -0
  22. package/src/hooks/provider/useViewerInPage.ts +35 -7
  23. package/src/hooks/provider/useViewerInWallet.ts +1 -0
  24. package/src/hooks/status/usePollNetworkStatus.ts +1 -1
  25. package/dist/browser/components/broadcast/details/SummaryStack.stories.d.ts +0 -8
  26. package/dist/browser/components/broadcast/details/SummaryStack.stories.d.ts.map +0 -1
  27. package/dist/browser/components/status/Alert.stories.d.ts +0 -10
  28. package/dist/browser/components/status/Alert.stories.d.ts.map +0 -1
  29. package/dist/browser/hooks/provider/UseViewerInPage.stories.d.ts +0 -10
  30. package/dist/browser/hooks/provider/UseViewerInPage.stories.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/broadcast/Drawer.tsx","../../src/hooks/provider/useActiveNetworkCurrentBlock.ts","../../src/hooks/provider/useViewerInPage.ts","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/context/network/settings/defaultChainNetworkSettings.ts","../../src/context/network/settings/useChainNetworkSettings.ts","../../src/context/network/use.ts","../../src/hooks/provider/useActiveNetworkNetwork.ts","../../src/hooks/provider/useActiveNetworkRunner.ts","../../src/hooks/provider/useRpcBroadcastListener.ts","../../src/hooks/provider/useViewerInWallet.ts","../../src/hooks/status/usePollNetworkStatus.ts","../../src/components/broadcast/CloseDrawerIconButton.tsx","../../src/components/broadcast/details/Card.tsx","../../src/components/broadcast/details/SummaryStack.tsx","../../src/components/broadcast/usePaginatedEventPairs.ts","../../src/components/menu/Avatar.tsx","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/components/status/NetworkStatus.tsx","../../src/model/BroadcastRpc.ts"],"sourcesContent":["import type { DrawerProps } from '@mui/material'\nimport {\n Box, Button, Drawer, Pagination, Stack, Typography,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { useRpcBroadcastListener } from '../../hooks/index.ts'\nimport type { RpcRequestResponsePairsById } from '../../model/index.ts'\nimport { CloseDrawerIconButton } from './CloseDrawerIconButton.tsx'\nimport { BroadcastedRpcCallDetailsCard } from './details/index.ts'\nimport { usePaginatedEventPairs } from './usePaginatedEventPairs.ts'\n\nexport interface BroadcastRpcCallsDrawer extends DrawerProps {\n drawerTitle?: string\n events: RpcRequestResponsePairsById\n numberOfVisibleEvents?: number\n onClearEvents?: () => void\n}\n\nexport const BroadcastedRpcCallsDrawer: React.FC<BroadcastRpcCallsDrawer> = ({\n anchor = 'right',\n onClearEvents,\n drawerTitle,\n events,\n onClose,\n numberOfVisibleEvents = 25,\n ...props\n}) => {\n const [scrollableDiv, setScrollableDiv] = useState<HTMLDivElement | null>(null)\n const {\n allEventEntries,\n visibleEvents,\n totalPages,\n effectiveCurrentPage,\n handleClearEvents,\n handlePageChange,\n } = usePaginatedEventPairs(\n events,\n numberOfVisibleEvents,\n onClearEvents,\n scrollableDiv,\n )\n\n return (\n <Drawer anchor={anchor} onClose={onClose} keepMounted={false} {...props}>\n <CloseDrawerIconButton anchor={anchor} onClose={onClose} />\n <Stack gap={2} sx={{ p: 3 }} flexShrink={0}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\" gap={4}>\n <Typography variant=\"h6\">{drawerTitle ?? 'Broadcasted RPC Calls'}</Typography>\n <Button variant=\"outlined\" size=\"small\" onClick={handleClearEvents}>Clear All</Button>\n </Stack>\n {allEventEntries.length > 0 && (\n <Pagination\n count={totalPages}\n page={effectiveCurrentPage}\n onChange={handlePageChange}\n color=\"primary\"\n />\n )}\n\n </Stack>\n <Stack direction=\"column\" id=\"events-container\" flexGrow={1} sx={{ overflowY: 'hidden' }}>\n <Box\n ref={(el: HTMLDivElement) => setScrollableDiv(el)}\n sx={{\n overflowY: 'auto', px: 3, pb: 3,\n }}\n >\n {visibleEvents.map(([id, broadcastedRpcCall], index) => {\n return <BroadcastedRpcCallDetailsCard key={id} rpcRequestResponsePairs={broadcastedRpcCall} sx={{ mb: index < visibleEvents.length - 1 ? 2 : 0 }} />\n })}\n </Box>\n </Stack>\n </Drawer>\n )\n}\n\nexport const BroadcastedRpcCallsDrawerWithEvents: React.FC<DrawerProps> = (props) => {\n const { clearEvents, events } = useRpcBroadcastListener()\n\n return (\n <BroadcastedRpcCallsDrawer\n events={events}\n onClearEvents={clearEvents}\n {...props}\n />\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-sdk'\n\nimport { useViewerInPage } from './useViewerInPage.ts'\n\nexport const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {\n const viewer = useViewerInPage()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {\n const [viewer] = useViewerFromWallet()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n","import {\n isDefined, isNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-sdk'\n\nimport type { ChainNetworkSettings } from '../../context/index.ts'\nimport { useChainNetwork } from '../../context/index.ts'\n\nconst shouldProxy = (networkSettings: ChainNetworkSettings, networkBootstrap: NetworkBootstrap | undefined) => {\n return isDefined(networkBootstrap)\n && isDefined(networkSettings[networkBootstrap.id])\n && networkSettings[networkBootstrap.id].proxy\n}\n\n/**\n * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC\n * @returns - XyoViewer for the active network\n */\nexport const useViewerInPage = (networkOverride?: NetworkBootstrap) => {\n let networkBootstrap: NetworkBootstrap | undefined\n const { activeNetwork, networkSettings } = useChainNetwork()\n networkBootstrap = isDefined(networkOverride) ? networkOverride : activeNetwork\n\n const httpRpcViewer = useHttpRpcViewer(networkBootstrap)\n const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id)\n\n // If the wallet viewer is undefined, don't return it yet, useViewerFromWallet is still checking\n if (isUndefined(walletRpcViewer)) return\n\n if (shouldProxy(networkSettings, networkBootstrap)) {\n if (isNull(walletRpcViewer)) {\n console.warn(`Network ${networkBootstrap?.id} is set to proxy but no wallet viewer is available, falling back to HTTP RPC viewer`)\n return httpRpcViewer\n }\n // If the network setting is to proxy and the wallet viewer is available,\n // try to use the wallet viewer\n return walletRpcViewer\n }\n\n return httpRpcViewer\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 { isDefined } from '@xylabs/sdk-js'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-sdk'\nimport { MainNetwork } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkSettings } from './settings/index.ts'\nimport { defaultChainNetworkSettings, useChainNetworkSettings } from './settings/index.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networkSettings?: ChainNetworkSettings\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networkSettings: networkSettingsProp = defaultChainNetworkSettings, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n const { networkSettings, updateNetworkSettings } = useChainNetworkSettings(networkSettingsProp)\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 === MainNetwork.id) ?? networks[0]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState(resolvedActiveNetwork)\n if (isDefined(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n setPreviousResolvedActiveNetwork(resolvedActiveNetwork)\n }\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n if (!network) {\n setError(new Error(`Network with id ${networkId} not found`))\n return\n }\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks, setActiveNetworkExternal])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n networkSettings,\n updateNetworkSettings,\n chainNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, activeNetworkError, error, networkSettings, networks, updateActiveNetwork, updateNetworkSettings])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"ChainNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import { LocalNetwork } from '@xyo-network/xl1-sdk'\n\nimport type { ChainNetworkSettings } from './types.ts'\n\nexport const defaultChainNetworkSettings: ChainNetworkSettings = { [LocalNetwork.id]: { proxy: true } }\n","import type { NetworkBootstrap } from '@xyo-network/xl1-sdk'\nimport { useCallback, useState } from 'react'\n\nimport { defaultChainNetworkSettings } from './defaultChainNetworkSettings.ts'\nimport type { ChainNetworkSettings } from './types.ts'\n\nexport const useChainNetworkSettings = (defaults = defaultChainNetworkSettings) => {\n const [networkSettings, setNetworkSettings] = useState<ChainNetworkSettings>(defaults)\n\n const updateNetworkSettings = useCallback((\n networkId: NetworkBootstrap['id'],\n settings: Partial<ChainNetworkSettings>,\n ) => {\n setNetworkSettings(prevSettings => ({\n ...prevSettings,\n [networkId]: {\n ...prevSettings[networkId],\n ...settings,\n },\n }))\n }, [])\n\n return {\n networkSettings,\n updateNetworkSettings,\n }\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'ChainNetwork', required)\n","import { useNetwork } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n const network = useNetwork(activeNetwork?.id)\n return network\n}\n","import { useHttpRpcRunner } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkRunner = () => {\n const { activeNetwork } = useChainNetwork()\n const runner = useHttpRpcRunner(activeNetwork?.url)\n\n return runner\n}\n","import type { JsonRpcRequest, JsonRpcResponse } from '@metamask/utils'\nimport { isJsonRpcRequest, isJsonRpcResponse } from '@metamask/utils'\nimport { isDefined, isString } from '@xylabs/sdk-js'\nimport { useEffect, useState } from 'react'\n\nimport type {\n BroadcastedRpcCall, RpcRequestResponsePairs, RpcRequestResponsePairsById,\n} from '../../model/index.ts'\n\nconst parseRpcCall = (acc: RpcRequestResponsePairsById, event: BroadcastedRpcCall) => {\n if (isJsonRpcResponse(event.rpcCall)) {\n const castedEvent = event as BroadcastedRpcCall<JsonRpcResponse>\n acc[castedEvent.rpcCall.id as string].result = castedEvent\n } else if (isJsonRpcRequest(event.rpcCall)) {\n const castedEvent = event as BroadcastedRpcCall<JsonRpcRequest>\n acc[castedEvent.rpcCall.id as string].request = castedEvent\n } else {\n console.error('Unknown RPC call type', event)\n }\n acc[event.rpcCall.id as string].source = event.source\n\n return acc\n}\n\nexport const useRpcBroadcastListener = () => {\n const [events, setEvents] = useState<RpcRequestResponsePairsById>({})\n const clearEvents = () => setEvents({})\n\n useEffect(() => {\n const listener = (e: Event) => {\n if ('detail' in e) {\n const { detail } = e ?? {}\n if (isString(detail)) {\n try {\n const parsedDetail = JSON.parse(detail)\n const { data: rpcCall, source } = parsedDetail\n // TODO - make zod type for parsing details\n const broadcastedRpcCall: BroadcastedRpcCall = {\n rpcCall,\n source,\n timestamp: Date.now(),\n }\n setEvents((prev) => {\n const { id } = broadcastedRpcCall.rpcCall\n const newState = { ...prev }\n if (isDefined(newState[id as string])) {\n parseRpcCall(newState, broadcastedRpcCall)\n } else {\n newState[id as string] = {} as RpcRequestResponsePairs\n parseRpcCall(newState, broadcastedRpcCall)\n }\n return newState\n })\n } catch (err) {\n console.error(err)\n }\n }\n }\n }\n globalThis.addEventListener('xyo:broadcast-rpc-request', listener)\n globalThis.addEventListener('xyo:broadcast-rpc-response', listener)\n\n return () => {\n globalThis.removeEventListener('xyo:broadcast-rpc-request', listener)\n globalThis.removeEventListener('xyo:broadcast-rpc-response', listener)\n }\n }, [])\n\n return { events, clearEvents }\n}\n","import { useHttpRpcViewer } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer directly from the active network\n * @returns - The viewer for the active network\n */\nexport const useViewerInWallet = () => {\n const { activeNetwork } = useChainNetwork()\n const walletViewer = useHttpRpcViewer(activeNetwork?.url)\n return walletViewer\n}\n","import { delay, isUndefined } from '@xylabs/sdk-js'\nimport type { NetworkStatus } from '@xyo-network/xl1-sdk'\nimport { useEffect, useState } from 'react'\n\nimport { useActiveNetworkNetwork } from '../index.ts'\n\nconst STATUS_CHECK_INTERVAL = 10_000\n\nexport const usePollNetworkStatus = () => {\n const network = useActiveNetworkNetwork()\n const [networkStatus, setNetworkStatus] = useState<NetworkStatus>()\n const [networkStatusError, setNetworkStatusError] = useState<Error>()\n\n // Check network status every 10 seconds\n useEffect(() => {\n let checkNetwork = true\n void (async () => {\n if (isUndefined(network)) return\n while (checkNetwork) {\n try {\n const response = await network.status()\n setNetworkStatus(response)\n setNetworkStatusError(undefined)\n } catch (error) {\n console.error('Error fetching network status:', error)\n setNetworkStatus(undefined)\n setNetworkStatusError(error as Error)\n }\n await delay(STATUS_CHECK_INTERVAL)\n }\n })()\n\n return () => {\n // Cleanup function to stop checking network status at the current statusUrl\n checkNetwork = false\n }\n }, [network])\n\n return [networkStatus, networkStatusError] as const\n}\n","import { Cancel } from '@mui/icons-material'\nimport type { DrawerProps, IconButtonProps } from '@mui/material'\nimport { IconButton } from '@mui/material'\nimport React from 'react'\n\nexport interface CloseDrawerIconButtonProps extends IconButtonProps {\n anchor?: DrawerProps['anchor']\n onClose?: DrawerProps['onClose']\n}\n\nexport const CloseDrawerIconButton: React.FC<CloseDrawerIconButtonProps> = ({ anchor, onClose }) => {\n return (\n <IconButton\n onClick={e => onClose?.(e, 'backdropClick')}\n size=\"small\"\n sx={{\n alignSelf: anchor === 'right' ? 'start' : 'end', top: 8, right: anchor === 'right' ? undefined : 8, left: anchor === 'left' ? undefined : 8,\n }}\n >\n <Cancel fontSize=\"small\" />\n </IconButton>\n )\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, Collapse,\n Stack, Typography,\n} from '@mui/material'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport React, { memo, useState } from 'react'\n\nimport type { RpcRequestResponsePairs } from '../../../model/index.ts'\nimport { BroadcastedRpcCallDetailsSummaryStack } from './SummaryStack.tsx'\n\nconst JSON_VIEWER_WIDTH = 600\n\nexport interface BroadcastRpcCallDetailsCardProps extends CardProps {\n rpcRequestResponsePairs?: RpcRequestResponsePairs\n}\n\nexport const BroadcastedRpcCallDetailsCard: React.FC<BroadcastRpcCallDetailsCardProps> = memo(({\n rpcRequestResponsePairs, sx, ...props\n}) => {\n const [expanded, setExpanded] = useState(false)\n\n if (!rpcRequestResponsePairs) return null\n\n const {\n request, result, source,\n } = rpcRequestResponsePairs\n\n return (\n <Card\n sx={{\n p: 1, display: 'flex', flexDirection: 'column', width: JSON_VIEWER_WIDTH, ...sx,\n }}\n {...props}\n >\n <BroadcastedRpcCallDetailsSummaryStack\n expanded={expanded}\n params={request.rpcCall.params}\n hasResult={isDefined(result)}\n method={request.rpcCall.method}\n setExpanded={setExpanded}\n timestamp={request.timestamp}\n />\n <Collapse in={expanded} mountOnEnter unmountOnExit>\n <Stack direction=\"column\" p={1} gap={2} alignItems=\"stretch\">\n <Typography variant=\"body2\">\n Source:\n <Typography variant=\"caption\" component=\"span\" fontFamily=\"monospace\" sx={{ ml: 1 }}>{source}</Typography>\n </Typography>\n <Typography variant=\"body2\">Request:</Typography>\n <JsonViewerEx\n value={request}\n sx={{ maxHeight: 300, overflow: 'auto' }}\n />\n {isDefined(result)\n ? (\n <>\n <Typography variant=\"body2\">Result:</Typography>\n <JsonViewerEx\n value={result}\n sx={{ maxHeight: 300, overflow: 'auto' }}\n />\n </>\n )\n : null}\n </Stack>\n </Collapse>\n </Card>\n )\n})\n","import type { JsonRpcParams } from '@metamask/utils'\nimport {\n ArrowRight, CheckCircle, Warning,\n} from '@mui/icons-material'\nimport {\n Avatar,\n Icon, IconButton, Stack, type StackProps, Tooltip, Typography,\n useTheme,\n} from '@mui/material'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { ObjectHasher } from '@xyo-network/hash'\nimport React from 'react'\n\nexport interface BroadcastRpcCallDetailsSummaryStackProps extends StackProps {\n expanded?: boolean\n hasResult?: boolean\n method?: string\n params?: JsonRpcParams\n setExpanded?: (expanded: boolean) => void\n timestamp?: number\n}\n\nexport const BroadcastedRpcCallDetailsSummaryStack: React.FC<BroadcastRpcCallDetailsSummaryStackProps> = ({\n expanded, setExpanded, method, timestamp, hasResult, params, ...props\n}) => {\n const theme = useTheme()\n const [hash, hashError] = usePromise(async () => {\n if (isDefined(params)) {\n return await ObjectHasher.hash(params)\n }\n }, [params])\n\n return (\n <Stack direction=\"row\" gap={2} alignItems=\"center\" justifyContent=\"space-between\" {...props}>\n <Stack direction=\"row\" gap={2} alignItems=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => setExpanded?.(!expanded)}\n >\n <ArrowRight sx={{ transform: expanded ? 'rotate(90deg)' : 'rotate(0deg)', transition: 'transform 0.2s ease-in-out' }} fontSize=\"small\" />\n </IconButton>\n <Tooltip\n title={isDefined(hashError)\n ? `Error generating hash of params: ${hashError.message}`\n : isDefined(params) ? `Params : ${JSON.stringify(params, null, 2)}` : 'No Params Provided'}\n >\n <Avatar sx={{\n backgroundColor: theme.vars?.palette.text.primary, width: 20, height: 20, opacity: isDefined(hash) ? 1 : 0.5,\n }}\n >\n <Identicon value={hash} size={14} />\n </Avatar>\n </Tooltip>\n <Typography component=\"span\" variant=\"body2\" fontFamily=\"monospace\">\n {method}\n </Typography>\n <Typography component=\"span\" variant=\"caption\" color=\"text.secondary\" sx={{ opacity: 0.6 }}>\n {isDefined(timestamp) ? new Date(timestamp).toLocaleString() : ''}\n </Typography>\n </Stack>\n <Icon sx={{ justifySelf: 'end' }}>{hasResult ? <CheckCircle color=\"success\" /> : <Warning color=\"warning\" />}</Icon>\n </Stack>\n )\n}\n","import { isDefinedNotNull } from '@xylabs/sdk-js'\nimport type { ChangeEvent } from 'react'\nimport {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport type { RpcRequestResponsePairsById } from '../../model/index.ts'\n\nexport const usePaginatedEventPairs = (\n formattedEvents: RpcRequestResponsePairsById,\n numberOfVisiblePairs: number,\n onClearEvents?: () => void,\n scrollableDiv?: HTMLDivElement | null,\n) => {\n const [currentPage, setCurrentPage] = useState(0)\n\n const allEventEntries = useMemo(() => {\n return Object.entries(formattedEvents ?? {}).toSorted(([, a], [, b]) => b.request.timestamp - a.request.timestamp)\n }, [formattedEvents])\n\n const totalPages = useMemo(() => {\n return Math.ceil(allEventEntries.length / numberOfVisiblePairs)\n }, [allEventEntries.length, numberOfVisiblePairs])\n\n // Clamp current page to valid range\n const effectiveCurrentPage = useMemo(() => {\n if (totalPages === 0) return 0\n return Math.min(currentPage, totalPages - 1)\n }, [currentPage, totalPages])\n\n const visibleEvents = useMemo(() => {\n if (isDefinedNotNull(scrollableDiv)) {\n scrollableDiv.scrollTo({ top: 0, behavior: 'smooth' })\n }\n const startIndex = effectiveCurrentPage * numberOfVisiblePairs\n const endIndex = startIndex + numberOfVisiblePairs\n return allEventEntries.slice(startIndex, endIndex)\n }, [allEventEntries, effectiveCurrentPage, numberOfVisiblePairs, scrollableDiv])\n\n const handlePreviousPage = useCallback(() => {\n setCurrentPage(prev => Math.max(0, prev - 1))\n }, [])\n\n const handleNextPage = useCallback(() => {\n setCurrentPage(prev => Math.min(totalPages - 1, prev + 1))\n }, [totalPages])\n\n const handleClearEvents = useCallback(() => {\n setCurrentPage(0)\n onClearEvents?.()\n }, [onClearEvents])\n\n // Compatible with TablePagination's onPageChange signature\n // Accepts 1-indexed page, converts to 0-indexed internally\n const handlePageChange = useCallback((_event: ChangeEvent<unknown>, page: number) => {\n setCurrentPage(page - 1)\n }, [])\n\n return {\n allEventEntries,\n visibleEvents,\n effectiveCurrentPage: effectiveCurrentPage + 1, // Return 1-indexed page\n totalPages,\n handlePreviousPage,\n handleNextPage,\n handleClearEvents,\n handlePageChange,\n }\n}\n","import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport type { CSSProperties } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport interface NetworkAvatarProps extends AvatarProps {\n icon?: string\n iconStyles?: CSSProperties\n name?: string\n}\n\nexport const NetworkAvatar: React.FC<NetworkAvatarProps> = ({\n icon, iconStyles, name, sx, ...props\n}) => {\n return (\n <Avatar\n sx={{ backgroundColor: 'white', ...sx }}\n alt={name}\n {...props}\n >\n <NetworkIcon\n icon={icon}\n style={{ ...iconStyles }}\n />\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 type { DetailedHTMLProps, HtmlHTMLAttributes } from 'react'\nimport React from 'react'\n\nexport interface NetworkIconProps extends DetailedHTMLProps<HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {\n icon?: string\n}\n\nexport const NetworkIcon: React.FC<NetworkIconProps> = ({\n icon, style, ...props\n}) => {\n return (\n <span\n // eslint-disable-next-line react-dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{ __html: icon ?? '' }} // Placeholder for SVG\\\n style={{\n display: 'inline-flex', width: 24, height: 24, ...style,\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 { NetworkBootstrap, NetworkId } from '@xyo-network/xl1-sdk'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: NetworkId) => 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 sx={{ py: 1 }}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} sx={{ width: 30, height: 30 }} />\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 type { NetworkStatus } from '@xyo-network/xl1-sdk'\nimport React, { useMemo, useState } from 'react'\n\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 case 'unknown': {\n return 'error'\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 <>\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 : null}\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 type { NetworkStatusUpdate } from '@xyo-network/xl1-sdk'\nimport React from 'react'\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","import type { AlertProps } from '@mui/material'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { usePollNetworkStatus } from '../../hooks/index.ts'\nimport { NetworkStatusAlert } from './Alert.tsx'\n\nconst validNetworkStates = new Set(['online', 'unknown'])\n\nexport interface NetworkStatusProps extends PropsWithChildren<AlertProps> {}\n\nexport const NetworkStatus: React.FC<NetworkStatusProps> = ({ children, ...props }) => {\n const [networkStatus] = usePollNetworkStatus()\n const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state)\n return (\n <>\n {showStatus ? <NetworkStatusAlert status={networkStatus} {...props} /> : null}\n {children}\n </>\n )\n}\n","import type { JsonRpcRequest, JsonRpcResponse } from '@metamask/utils'\n\n// Configuration options for broadcasting RPC calls\nexport type BroadcastRpcConfig = { request: boolean; response: boolean }\n\n// Event Names\nexport const BroadcastRpcRequestEventName = 'xyo:broadcast-rpc-request' as const\nexport const BroadcastRpcResponseEventName = 'xyo:broadcast-rpc-response' as const\nexport type BroadcastRpcEventNames = typeof BroadcastRpcRequestEventName | typeof BroadcastRpcResponseEventName\n\n// default options are to broadcast all events\nexport const defaultBroadcastConfig: BroadcastRpcConfig = { request: true, response: true }\n\nexport interface BroadcastedRpcCall<TRpcCall extends JsonRpcRequest | JsonRpcResponse = JsonRpcRequest | JsonRpcResponse> {\n rpcCall: TRpcCall\n source: string\n timestamp: number\n}\n\nexport type RpcRequestResponsePairs = {\n request: BroadcastedRpcCall<JsonRpcRequest>\n result?: BroadcastedRpcCall<JsonRpcResponse>\n source?: string\n}\n\nexport type RpcRequestResponsePairsById = {\n [id: string]: RpcRequestResponsePairs\n}\n"],"mappings":"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","names":["Box","Button","Drawer","Pagination","Stack","Typography","React","useState","useCurrentBlock","useViewerFromWallet","isDefined","isNull","isUndefined","useHttpRpcViewer","useViewerFromWallet","createContextEx","ChainNetworkContext","ErrorRender","usePromise","isDefined","MainNetwork","React","useCallback","useMemo","useState","LocalNetwork","defaultChainNetworkSettings","id","proxy","useCallback","useState","useChainNetworkSettings","defaults","defaultChainNetworkSettings","networkSettings","setNetworkSettings","useState","updateNetworkSettings","useCallback","networkId","settings","prevSettings","ChainNetworkProvider","children","getActiveNetwork","networkSettings","networkSettingsProp","defaultChainNetworkSettings","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","updateNetworkSettings","useChainNetworkSettings","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","MainNetwork","previousResolvedActiveNetwork","setPreviousResolvedActiveNetwork","isDefined","updateActiveNetwork","useCallback","networkId","undefined","Error","value","useMemo","provided","chainNetworkError","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","shouldProxy","networkSettings","networkBootstrap","isDefined","id","proxy","useViewerInPage","networkOverride","activeNetwork","useChainNetwork","httpRpcViewer","useHttpRpcViewer","walletRpcViewer","useViewerFromWallet","isUndefined","isNull","console","warn","useActiveNetworkCurrentBlock","refresh","viewer","currentBlock","useCurrentBlock","useActiveNetworkCurrentBlockInPage","useViewerInPage","useActiveNetworkCurrentBlockInWallet","useViewerFromWallet","useNetwork","useActiveNetworkNetwork","activeNetwork","useChainNetwork","network","useNetwork","id","useHttpRpcRunner","useActiveNetworkRunner","activeNetwork","useChainNetwork","runner","useHttpRpcRunner","url","isJsonRpcRequest","isJsonRpcResponse","isDefined","isString","useEffect","useState","parseRpcCall","acc","event","isJsonRpcResponse","rpcCall","castedEvent","id","result","isJsonRpcRequest","request","console","error","source","useRpcBroadcastListener","events","setEvents","useState","clearEvents","useEffect","listener","e","detail","isString","parsedDetail","JSON","parse","data","broadcastedRpcCall","timestamp","Date","now","prev","newState","isDefined","err","globalThis","addEventListener","removeEventListener","useHttpRpcViewer","useViewerInWallet","activeNetwork","useChainNetwork","walletViewer","useHttpRpcViewer","url","delay","isUndefined","useEffect","useState","STATUS_CHECK_INTERVAL","usePollNetworkStatus","network","useActiveNetworkNetwork","networkStatus","setNetworkStatus","useState","networkStatusError","setNetworkStatusError","useEffect","checkNetwork","isUndefined","response","status","undefined","error","console","delay","Cancel","IconButton","React","CloseDrawerIconButton","anchor","onClose","React","IconButton","onClick","e","size","sx","alignSelf","top","right","undefined","left","Cancel","fontSize","Card","Collapse","Stack","Typography","isDefined","JsonViewerEx","React","memo","useState","ArrowRight","CheckCircle","Warning","Avatar","Icon","IconButton","Stack","Tooltip","Typography","useTheme","Identicon","usePromise","isDefined","ObjectHasher","React","BroadcastedRpcCallDetailsSummaryStack","expanded","setExpanded","method","timestamp","hasResult","params","props","theme","useTheme","hash","hashError","usePromise","isDefined","ObjectHasher","React","Stack","direction","gap","alignItems","justifyContent","IconButton","size","onClick","ArrowRight","sx","transform","transition","fontSize","Tooltip","title","message","JSON","stringify","Avatar","backgroundColor","vars","palette","text","primary","width","height","opacity","Identicon","value","Typography","component","variant","fontFamily","color","Date","toLocaleString","Icon","justifySelf","CheckCircle","Warning","JSON_VIEWER_WIDTH","BroadcastedRpcCallDetailsCard","memo","rpcRequestResponsePairs","sx","props","expanded","setExpanded","useState","request","result","source","React","Card","p","display","flexDirection","width","BroadcastedRpcCallDetailsSummaryStack","params","rpcCall","hasResult","isDefined","method","timestamp","Collapse","in","mountOnEnter","unmountOnExit","Stack","direction","gap","alignItems","Typography","variant","component","fontFamily","ml","JsonViewerEx","value","maxHeight","overflow","isDefinedNotNull","useCallback","useMemo","useState","usePaginatedEventPairs","formattedEvents","numberOfVisiblePairs","onClearEvents","scrollableDiv","currentPage","setCurrentPage","useState","allEventEntries","useMemo","Object","entries","toSorted","a","b","request","timestamp","totalPages","Math","ceil","length","effectiveCurrentPage","min","visibleEvents","isDefinedNotNull","scrollTo","top","behavior","startIndex","endIndex","slice","handlePreviousPage","useCallback","prev","max","handleNextPage","handleClearEvents","handlePageChange","_event","page","BroadcastedRpcCallsDrawer","anchor","onClearEvents","drawerTitle","events","onClose","numberOfVisibleEvents","props","scrollableDiv","setScrollableDiv","useState","allEventEntries","visibleEvents","totalPages","effectiveCurrentPage","handleClearEvents","handlePageChange","usePaginatedEventPairs","React","Drawer","keepMounted","CloseDrawerIconButton","Stack","gap","sx","p","flexShrink","direction","justifyContent","alignItems","Typography","variant","Button","size","onClick","length","Pagination","count","page","onChange","color","id","flexGrow","overflowY","Box","ref","el","px","pb","map","broadcastedRpcCall","index","BroadcastedRpcCallDetailsCard","key","rpcRequestResponsePairs","mb","BroadcastedRpcCallsDrawerWithEvents","clearEvents","useRpcBroadcastListener","Avatar","React","React","NetworkIcon","icon","style","props","React","span","dangerouslySetInnerHTML","__html","display","width","height","NetworkAvatar","icon","iconStyles","name","sx","props","React","Avatar","backgroundColor","alt","NetworkIcon","style","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","sx","py","NetworkAvatar","icon","width","height","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","React","validNetworkStates","Set","NetworkStatus","children","props","networkStatus","usePollNetworkStatus","showStatus","has","state","React","NetworkStatusAlert","status","BroadcastRpcRequestEventName","BroadcastRpcResponseEventName","defaultBroadcastConfig","request","response"]}
1
+ {"version":3,"sources":["../../src/components/broadcast/Drawer.tsx","../../src/hooks/provider/useActiveNetworkCurrentBlock.ts","../../src/hooks/provider/useViewerInPage.ts","../../src/context/ActiveGatewayProvider.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/context/network/settings/defaultChainNetworkSettings.ts","../../src/context/network/settings/useChainNetworkSettings.ts","../../src/context/network/use.ts","../../src/hooks/provider/useActiveNetworkNetwork.ts","../../src/hooks/provider/useActiveNetworkRunner.ts","../../src/hooks/provider/useRpcBroadcastListener.ts","../../src/hooks/provider/useViewerInWallet.ts","../../src/hooks/status/usePollNetworkStatus.ts","../../src/components/broadcast/CloseDrawerIconButton.tsx","../../src/components/broadcast/details/Card.tsx","../../src/components/broadcast/details/SummaryStack.tsx","../../src/components/broadcast/usePaginatedEventPairs.ts","../../src/components/menu/Avatar.tsx","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/components/status/NetworkStatus.tsx","../../src/model/BroadcastRpc.ts"],"sourcesContent":["import type { DrawerProps } from '@mui/material'\nimport {\n Box, Button, Drawer, Pagination, Stack, Typography,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { useRpcBroadcastListener } from '../../hooks/index.ts'\nimport type { RpcRequestResponsePairsById } from '../../model/index.ts'\nimport { CloseDrawerIconButton } from './CloseDrawerIconButton.tsx'\nimport { BroadcastedRpcCallDetailsCard } from './details/index.ts'\nimport { usePaginatedEventPairs } from './usePaginatedEventPairs.ts'\n\nexport interface BroadcastRpcCallsDrawer extends DrawerProps {\n drawerTitle?: string\n events: RpcRequestResponsePairsById\n numberOfVisibleEvents?: number\n onClearEvents?: () => void\n}\n\nexport const BroadcastedRpcCallsDrawer: React.FC<BroadcastRpcCallsDrawer> = ({\n anchor = 'right',\n onClearEvents,\n drawerTitle,\n events,\n onClose,\n numberOfVisibleEvents = 25,\n ...props\n}) => {\n const [scrollableDiv, setScrollableDiv] = useState<HTMLDivElement | null>(null)\n const {\n allEventEntries,\n visibleEvents,\n totalPages,\n effectiveCurrentPage,\n handleClearEvents,\n handlePageChange,\n } = usePaginatedEventPairs(\n events,\n numberOfVisibleEvents,\n onClearEvents,\n scrollableDiv,\n )\n\n return (\n <Drawer anchor={anchor} onClose={onClose} keepMounted={false} {...props}>\n <CloseDrawerIconButton anchor={anchor} onClose={onClose} />\n <Stack gap={2} sx={{ p: 3 }} flexShrink={0}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\" gap={4}>\n <Typography variant=\"h6\">{drawerTitle ?? 'Broadcasted RPC Calls'}</Typography>\n <Button variant=\"outlined\" size=\"small\" onClick={handleClearEvents}>Clear All</Button>\n </Stack>\n {allEventEntries.length > 0 && (\n <Pagination\n count={totalPages}\n page={effectiveCurrentPage}\n onChange={handlePageChange}\n color=\"primary\"\n />\n )}\n\n </Stack>\n <Stack direction=\"column\" id=\"events-container\" flexGrow={1} sx={{ overflowY: 'hidden' }}>\n <Box\n ref={(el: HTMLDivElement) => setScrollableDiv(el)}\n sx={{\n overflowY: 'auto', px: 3, pb: 3,\n }}\n >\n {visibleEvents.map(([id, broadcastedRpcCall], index) => {\n return <BroadcastedRpcCallDetailsCard key={id} rpcRequestResponsePairs={broadcastedRpcCall} sx={{ mb: index < visibleEvents.length - 1 ? 2 : 0 }} />\n })}\n </Box>\n </Stack>\n </Drawer>\n )\n}\n\nexport const BroadcastedRpcCallsDrawerWithEvents: React.FC<DrawerProps> = (props) => {\n const { clearEvents, events } = useRpcBroadcastListener()\n\n return (\n <BroadcastedRpcCallsDrawer\n events={events}\n onClearEvents={clearEvents}\n {...props}\n />\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-sdk'\n\nimport { useViewerInPage } from './useViewerInPage.ts'\n\n/* @deprecated - use useCurrentBlock from @xyo-network/react-chain-provider instead */\nexport const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\n/* @deprecated - use useCurrentBlock from @xyo-network/react-chain-provider instead */\nexport const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {\n const viewer = useViewerInPage()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {\n const [viewer] = useViewerFromWallet()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n","import {\n isDefined, isNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport {\n useHttpRpcViewer, useProvidedGateway, useViewerFromWallet,\n} from '@xyo-network/react-chain-provider'\nimport type { NetworkBootstrap, NetworkId } from '@xyo-network/xl1-sdk'\n\nimport type { ChainNetworkSettings } from '../../context/index.ts'\nimport { useChainNetwork } from '../../context/index.ts'\n\nconst shouldProxy = (networkSettings: ChainNetworkSettings, networkId: NetworkId | undefined) => {\n return isDefined(networkId)\n && isDefined(networkSettings[networkId])\n && networkSettings[networkId].proxy\n}\n\n/**\n * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC\n * @returns - XyoViewer for the active network\n */\n/* @deprecated - use useViewerInPageV2 instead */\nexport const useViewerInPage = (networkOverride?: NetworkBootstrap) => {\n let networkBootstrap: NetworkBootstrap | undefined\n const { activeNetwork, networkSettings } = useChainNetwork()\n networkBootstrap = isDefined(networkOverride) ? networkOverride : activeNetwork\n\n const httpRpcViewer = useHttpRpcViewer(networkBootstrap)\n const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id)\n\n // If the wallet viewer is undefined, don't return it yet, useViewerFromWallet is still checking\n if (isUndefined(walletRpcViewer)) return\n\n if (shouldProxy(networkSettings, networkBootstrap?.id)) {\n if (isNull(walletRpcViewer)) {\n console.warn(`Network ${networkBootstrap?.id} is set to proxy but no wallet viewer is available, falling back to HTTP RPC viewer`)\n return httpRpcViewer\n }\n // If the network setting is to proxy and the wallet viewer is available,\n // try to use the wallet viewer\n return walletRpcViewer\n }\n\n return httpRpcViewer\n}\n\nexport const useViewerInPageV2 = () => {\n const { networkSettings, activeNetwork } = useChainNetwork()\n const { gateways } = useProvidedGateway()\n\n const { inPageGateway, walletGateway } = gateways\n\n const inPageViewer = inPageGateway?.connection?.viewer\n const walletViewer = walletGateway?.connection?.viewer\n\n // If the wallet viewer is undefined, don't return it yet, useViewerFromWallet is still checking\n if (isUndefined(walletGateway)) return\n\n if (shouldProxy(networkSettings, activeNetwork?.id)) {\n if (isNull(walletGateway)) {\n console.warn(`Network ${activeNetwork?.id} is set to proxy but no wallet viewer is available, falling back to HTTP RPC viewer`)\n return inPageViewer\n }\n // If the network setting is to proxy and the wallet viewer is available,\n // try to use the wallet viewer\n return walletViewer\n }\n\n return inPageViewer\n}\n","import { GatewayProvider } from '@xyo-network/react-chain-provider'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from './network/index.ts'\n\nexport interface ActiveGatewayProviderProps extends PropsWithChildren {\n account?: AccountInstance\n}\n\nexport const ActiveGatewayProvider: React.FC<ActiveGatewayProviderProps> = ({ account, children }) => {\n const { activeNetwork } = useChainNetwork()\n return (\n <GatewayProvider gatewayName={activeNetwork?.id} account={account}>\n {children}\n </GatewayProvider>\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 { isDefined } from '@xylabs/sdk-js'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-sdk'\nimport { MainNetwork } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkSettings } from './settings/index.ts'\nimport { defaultChainNetworkSettings, useChainNetworkSettings } from './settings/index.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networkSettings?: ChainNetworkSettings\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networkSettings: networkSettingsProp = defaultChainNetworkSettings, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n const { networkSettings, updateNetworkSettings } = useChainNetworkSettings(networkSettingsProp)\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 === MainNetwork.id) ?? networks[0]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState(resolvedActiveNetwork)\n if (isDefined(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n setPreviousResolvedActiveNetwork(resolvedActiveNetwork)\n }\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n if (!network) {\n setError(new Error(`Network with id ${networkId} not found`))\n return\n }\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks, setActiveNetworkExternal])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n networkSettings,\n updateNetworkSettings,\n chainNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, activeNetworkError, error, networkSettings, networks, updateActiveNetwork, updateNetworkSettings])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"ChainNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import { LocalNetwork } from '@xyo-network/xl1-sdk'\n\nimport type { ChainNetworkSettings } from './types.ts'\n\nexport const defaultChainNetworkSettings: ChainNetworkSettings = { [LocalNetwork.id]: { proxy: true } }\n","import type { NetworkBootstrap } from '@xyo-network/xl1-sdk'\nimport { useCallback, useState } from 'react'\n\nimport { defaultChainNetworkSettings } from './defaultChainNetworkSettings.ts'\nimport type { ChainNetworkSettings } from './types.ts'\n\nexport const useChainNetworkSettings = (defaults = defaultChainNetworkSettings) => {\n const [networkSettings, setNetworkSettings] = useState<ChainNetworkSettings>(defaults)\n\n const updateNetworkSettings = useCallback((\n networkId: NetworkBootstrap['id'],\n settings: Partial<ChainNetworkSettings>,\n ) => {\n setNetworkSettings(prevSettings => ({\n ...prevSettings,\n [networkId]: {\n ...prevSettings[networkId],\n ...settings,\n },\n }))\n }, [])\n\n return {\n networkSettings,\n updateNetworkSettings,\n }\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'ChainNetwork', required)\n","import { useNetwork } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/* @deprecated - use useNetworkFromGateway from @xyo-network/react-chain-provider instead */\nexport const useActiveNetworkNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n const network = useNetwork(activeNetwork?.id)\n return network\n}\n","import { useHttpRpcRunner } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/* @deprecated use useRunnerFromGateway in @xyo-network/react-chain-provider */\nexport const useActiveNetworkRunner = () => {\n const { activeNetwork } = useChainNetwork()\n const runner = useHttpRpcRunner(activeNetwork?.url)\n\n return runner\n}\n","import type { JsonRpcRequest, JsonRpcResponse } from '@metamask/utils'\nimport { isJsonRpcRequest, isJsonRpcResponse } from '@metamask/utils'\nimport { isDefined, isString } from '@xylabs/sdk-js'\nimport { useEffect, useState } from 'react'\n\nimport type {\n BroadcastedRpcCall, RpcRequestResponsePairs, RpcRequestResponsePairsById,\n} from '../../model/index.ts'\n\nconst parseRpcCall = (acc: RpcRequestResponsePairsById, event: BroadcastedRpcCall) => {\n if (isJsonRpcResponse(event.rpcCall)) {\n const castedEvent = event as BroadcastedRpcCall<JsonRpcResponse>\n acc[castedEvent.rpcCall.id as string].result = castedEvent\n } else if (isJsonRpcRequest(event.rpcCall)) {\n const castedEvent = event as BroadcastedRpcCall<JsonRpcRequest>\n acc[castedEvent.rpcCall.id as string].request = castedEvent\n } else {\n console.error('Unknown RPC call type', event)\n }\n acc[event.rpcCall.id as string].source = event.source\n\n return acc\n}\n\nexport const useRpcBroadcastListener = () => {\n const [events, setEvents] = useState<RpcRequestResponsePairsById>({})\n const clearEvents = () => setEvents({})\n\n useEffect(() => {\n const listener = (e: Event) => {\n if ('detail' in e) {\n const { detail } = e ?? {}\n if (isString(detail)) {\n try {\n const parsedDetail = JSON.parse(detail)\n const { data: rpcCall, source } = parsedDetail\n // TODO - make zod type for parsing details\n const broadcastedRpcCall: BroadcastedRpcCall = {\n rpcCall,\n source,\n timestamp: Date.now(),\n }\n setEvents((prev) => {\n const { id } = broadcastedRpcCall.rpcCall\n const newState = { ...prev }\n if (isDefined(newState[id as string])) {\n parseRpcCall(newState, broadcastedRpcCall)\n } else {\n newState[id as string] = {} as RpcRequestResponsePairs\n parseRpcCall(newState, broadcastedRpcCall)\n }\n return newState\n })\n } catch (err) {\n console.error(err)\n }\n }\n }\n }\n globalThis.addEventListener('xyo:broadcast-rpc-request', listener)\n globalThis.addEventListener('xyo:broadcast-rpc-response', listener)\n\n return () => {\n globalThis.removeEventListener('xyo:broadcast-rpc-request', listener)\n globalThis.removeEventListener('xyo:broadcast-rpc-response', listener)\n }\n }, [])\n\n return { events, clearEvents }\n}\n","import { useHttpRpcViewer } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer directly from the active network\n * @returns - The viewer for the active network\n */\n/** @deprecated use useViewerFromGateway in \\@xyo-network/react-chain-provider */\nexport const useViewerInWallet = () => {\n const { activeNetwork } = useChainNetwork()\n const walletViewer = useHttpRpcViewer(activeNetwork?.url)\n return walletViewer\n}\n","import { delay, isUndefined } from '@xylabs/sdk-js'\nimport type { NetworkStatus } from '@xyo-network/xl1-sdk'\nimport { useEffect, useState } from 'react'\n\nimport { useActiveNetworkNetwork } from '../index.ts'\n\nconst STATUS_CHECK_INTERVAL = 10_000\n\nexport const usePollNetworkStatus = () => {\n const network = useActiveNetworkNetwork()\n const [networkStatus, setNetworkStatus] = useState<NetworkStatus>()\n const [networkStatusError, setNetworkStatusError] = useState<Error>()\n\n // Check network status every 10 seconds\n useEffect(() => {\n let checkNetwork = true\n void (async () => {\n if (isUndefined(network)) return\n while (checkNetwork) {\n try {\n const response = await network.status()\n setNetworkStatus(response)\n setNetworkStatusError(undefined)\n } catch (error) {\n console.info('Error fetching network status:', error)\n setNetworkStatus(undefined)\n setNetworkStatusError(error as Error)\n }\n await delay(STATUS_CHECK_INTERVAL)\n }\n })()\n\n return () => {\n // Cleanup function to stop checking network status at the current statusUrl\n checkNetwork = false\n }\n }, [network])\n\n return [networkStatus, networkStatusError] as const\n}\n","import { Cancel } from '@mui/icons-material'\nimport type { DrawerProps, IconButtonProps } from '@mui/material'\nimport { IconButton } from '@mui/material'\nimport React from 'react'\n\nexport interface CloseDrawerIconButtonProps extends IconButtonProps {\n anchor?: DrawerProps['anchor']\n onClose?: DrawerProps['onClose']\n}\n\nexport const CloseDrawerIconButton: React.FC<CloseDrawerIconButtonProps> = ({ anchor, onClose }) => {\n return (\n <IconButton\n onClick={e => onClose?.(e, 'backdropClick')}\n size=\"small\"\n sx={{\n alignSelf: anchor === 'right' ? 'start' : 'end', top: 8, right: anchor === 'right' ? undefined : 8, left: anchor === 'left' ? undefined : 8,\n }}\n >\n <Cancel fontSize=\"small\" />\n </IconButton>\n )\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, Collapse,\n Stack, Typography,\n} from '@mui/material'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport React, { memo, useState } from 'react'\n\nimport type { RpcRequestResponsePairs } from '../../../model/index.ts'\nimport { BroadcastedRpcCallDetailsSummaryStack } from './SummaryStack.tsx'\n\nconst JSON_VIEWER_WIDTH = 600\n\nexport interface BroadcastRpcCallDetailsCardProps extends CardProps {\n rpcRequestResponsePairs?: RpcRequestResponsePairs\n}\n\nexport const BroadcastedRpcCallDetailsCard: React.FC<BroadcastRpcCallDetailsCardProps> = memo(({\n rpcRequestResponsePairs, sx, ...props\n}) => {\n const [expanded, setExpanded] = useState(false)\n\n if (!rpcRequestResponsePairs) return null\n\n const {\n request, result, source,\n } = rpcRequestResponsePairs\n\n return (\n <Card\n sx={{\n p: 1, display: 'flex', flexDirection: 'column', width: JSON_VIEWER_WIDTH, ...sx,\n }}\n {...props}\n >\n <BroadcastedRpcCallDetailsSummaryStack\n expanded={expanded}\n params={request.rpcCall.params}\n hasResult={isDefined(result)}\n method={request.rpcCall.method}\n setExpanded={setExpanded}\n timestamp={request.timestamp}\n />\n <Collapse in={expanded} mountOnEnter unmountOnExit>\n <Stack direction=\"column\" p={1} gap={2} alignItems=\"stretch\">\n <Typography variant=\"body2\">\n Source:\n <Typography variant=\"caption\" component=\"span\" fontFamily=\"monospace\" sx={{ ml: 1 }}>{source}</Typography>\n </Typography>\n <Typography variant=\"body2\">Request:</Typography>\n <JsonViewerEx\n value={request}\n sx={{ maxHeight: 300, overflow: 'auto' }}\n />\n {isDefined(result)\n ? (\n <>\n <Typography variant=\"body2\">Result:</Typography>\n <JsonViewerEx\n value={result}\n sx={{ maxHeight: 300, overflow: 'auto' }}\n />\n </>\n )\n : null}\n </Stack>\n </Collapse>\n </Card>\n )\n})\n","import type { JsonRpcParams } from '@metamask/utils'\nimport {\n ArrowRight, CheckCircle, Warning,\n} from '@mui/icons-material'\nimport {\n Avatar,\n Icon, IconButton, Stack, type StackProps, Tooltip, Typography,\n useTheme,\n} from '@mui/material'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { ObjectHasher } from '@xyo-network/hash'\nimport React from 'react'\n\nexport interface BroadcastRpcCallDetailsSummaryStackProps extends StackProps {\n expanded?: boolean\n hasResult?: boolean\n method?: string\n params?: JsonRpcParams\n setExpanded?: (expanded: boolean) => void\n timestamp?: number\n}\n\nexport const BroadcastedRpcCallDetailsSummaryStack: React.FC<BroadcastRpcCallDetailsSummaryStackProps> = ({\n expanded, setExpanded, method, timestamp, hasResult, params, ...props\n}) => {\n const theme = useTheme()\n const [hash, hashError] = usePromise(async () => {\n if (isDefined(params)) {\n return await ObjectHasher.hash(params)\n }\n }, [params])\n\n return (\n <Stack direction=\"row\" gap={2} alignItems=\"center\" justifyContent=\"space-between\" {...props}>\n <Stack direction=\"row\" gap={2} alignItems=\"center\">\n <IconButton\n size=\"small\"\n onClick={() => setExpanded?.(!expanded)}\n >\n <ArrowRight sx={{ transform: expanded ? 'rotate(90deg)' : 'rotate(0deg)', transition: 'transform 0.2s ease-in-out' }} fontSize=\"small\" />\n </IconButton>\n <Tooltip\n title={isDefined(hashError)\n ? `Error generating hash of params: ${hashError.message}`\n : isDefined(params) ? `Params : ${JSON.stringify(params, null, 2)}` : 'No Params Provided'}\n >\n <Avatar sx={{\n backgroundColor: theme.vars?.palette.text.primary, width: 20, height: 20, opacity: isDefined(hash) ? 1 : 0.5,\n }}\n >\n <Identicon value={hash} size={14} />\n </Avatar>\n </Tooltip>\n <Typography component=\"span\" variant=\"body2\" fontFamily=\"monospace\">\n {method}\n </Typography>\n <Typography component=\"span\" variant=\"caption\" color=\"text.secondary\" sx={{ opacity: 0.6 }}>\n {isDefined(timestamp) ? new Date(timestamp).toLocaleString() : ''}\n </Typography>\n </Stack>\n <Icon sx={{ justifySelf: 'end' }}>{hasResult ? <CheckCircle color=\"success\" /> : <Warning color=\"warning\" />}</Icon>\n </Stack>\n )\n}\n","import { isDefinedNotNull } from '@xylabs/sdk-js'\nimport type { ChangeEvent } from 'react'\nimport {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport type { RpcRequestResponsePairsById } from '../../model/index.ts'\n\nexport const usePaginatedEventPairs = (\n formattedEvents: RpcRequestResponsePairsById,\n numberOfVisiblePairs: number,\n onClearEvents?: () => void,\n scrollableDiv?: HTMLDivElement | null,\n) => {\n const [currentPage, setCurrentPage] = useState(0)\n\n const allEventEntries = useMemo(() => {\n return Object.entries(formattedEvents ?? {}).toSorted(([, a], [, b]) => b.request.timestamp - a.request.timestamp)\n }, [formattedEvents])\n\n const totalPages = useMemo(() => {\n return Math.ceil(allEventEntries.length / numberOfVisiblePairs)\n }, [allEventEntries.length, numberOfVisiblePairs])\n\n // Clamp current page to valid range\n const effectiveCurrentPage = useMemo(() => {\n if (totalPages === 0) return 0\n return Math.min(currentPage, totalPages - 1)\n }, [currentPage, totalPages])\n\n const visibleEvents = useMemo(() => {\n if (isDefinedNotNull(scrollableDiv)) {\n scrollableDiv.scrollTo({ top: 0, behavior: 'smooth' })\n }\n const startIndex = effectiveCurrentPage * numberOfVisiblePairs\n const endIndex = startIndex + numberOfVisiblePairs\n return allEventEntries.slice(startIndex, endIndex)\n }, [allEventEntries, effectiveCurrentPage, numberOfVisiblePairs, scrollableDiv])\n\n const handlePreviousPage = useCallback(() => {\n setCurrentPage(prev => Math.max(0, prev - 1))\n }, [])\n\n const handleNextPage = useCallback(() => {\n setCurrentPage(prev => Math.min(totalPages - 1, prev + 1))\n }, [totalPages])\n\n const handleClearEvents = useCallback(() => {\n setCurrentPage(0)\n onClearEvents?.()\n }, [onClearEvents])\n\n // Compatible with TablePagination's onPageChange signature\n // Accepts 1-indexed page, converts to 0-indexed internally\n const handlePageChange = useCallback((_event: ChangeEvent<unknown>, page: number) => {\n setCurrentPage(page - 1)\n }, [])\n\n return {\n allEventEntries,\n visibleEvents,\n effectiveCurrentPage: effectiveCurrentPage + 1, // Return 1-indexed page\n totalPages,\n handlePreviousPage,\n handleNextPage,\n handleClearEvents,\n handlePageChange,\n }\n}\n","import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport type { CSSProperties } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport interface NetworkAvatarProps extends AvatarProps {\n icon?: string\n iconStyles?: CSSProperties\n name?: string\n}\n\nexport const NetworkAvatar: React.FC<NetworkAvatarProps> = ({\n icon, iconStyles, name, sx, ...props\n}) => {\n return (\n <Avatar\n sx={{ backgroundColor: 'white', ...sx }}\n alt={name}\n {...props}\n >\n <NetworkIcon\n icon={icon}\n style={{ ...iconStyles }}\n />\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 type { DetailedHTMLProps, HtmlHTMLAttributes } from 'react'\nimport React from 'react'\n\nexport interface NetworkIconProps extends DetailedHTMLProps<HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {\n icon?: string\n}\n\nexport const NetworkIcon: React.FC<NetworkIconProps> = ({\n icon, style, ...props\n}) => {\n return (\n <span\n // eslint-disable-next-line react-dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{ __html: icon ?? '' }} // Placeholder for SVG\\\n style={{\n display: 'inline-flex', width: 24, height: 24, ...style,\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 { NetworkBootstrap, NetworkId } from '@xyo-network/xl1-sdk'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: NetworkId) => 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 sx={{ py: 1 }}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} sx={{ width: 30, height: 30 }} />\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 type { NetworkStatus } from '@xyo-network/xl1-sdk'\nimport React, { useMemo, useState } from 'react'\n\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 case 'unknown': {\n return 'error'\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 <>\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 : null}\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 type { NetworkStatusUpdate } from '@xyo-network/xl1-sdk'\nimport React from 'react'\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","import type { AlertProps } from '@mui/material'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { usePollNetworkStatus } from '../../hooks/index.ts'\nimport { NetworkStatusAlert } from './Alert.tsx'\n\nconst validNetworkStates = new Set(['online', 'unknown'])\n\nexport interface NetworkStatusProps extends PropsWithChildren<AlertProps> {}\n\nexport const NetworkStatus: React.FC<NetworkStatusProps> = ({ children, ...props }) => {\n const [networkStatus] = usePollNetworkStatus()\n const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state)\n return (\n <>\n {showStatus ? <NetworkStatusAlert status={networkStatus} {...props} /> : null}\n {children}\n </>\n )\n}\n","import type { JsonRpcRequest, JsonRpcResponse } from '@metamask/utils'\n\n// Configuration options for broadcasting RPC calls\nexport type BroadcastRpcConfig = { request: boolean; response: boolean }\n\n// Event Names\nexport const BroadcastRpcRequestEventName = 'xyo:broadcast-rpc-request' as const\nexport const BroadcastRpcResponseEventName = 'xyo:broadcast-rpc-response' as const\nexport type BroadcastRpcEventNames = typeof BroadcastRpcRequestEventName | typeof BroadcastRpcResponseEventName\n\n// default options are to broadcast all events\nexport const defaultBroadcastConfig: BroadcastRpcConfig = { request: true, response: true }\n\nexport interface BroadcastedRpcCall<TRpcCall extends JsonRpcRequest | JsonRpcResponse = JsonRpcRequest | JsonRpcResponse> {\n rpcCall: TRpcCall\n source: string\n timestamp: number\n}\n\nexport type RpcRequestResponsePairs = {\n request: BroadcastedRpcCall<JsonRpcRequest>\n result?: BroadcastedRpcCall<JsonRpcResponse>\n source?: string\n}\n\nexport type RpcRequestResponsePairsById = {\n [id: string]: RpcRequestResponsePairs\n}\n"],"mappings":"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","names":["Box","Button","Drawer","Pagination","Stack","Typography","React","useState","useCurrentBlock","useViewerFromWallet","isDefined","isNull","isUndefined","useHttpRpcViewer","useProvidedGateway","useViewerFromWallet","GatewayProvider","React","createContextEx","ChainNetworkContext","ErrorRender","usePromise","isDefined","MainNetwork","React","useCallback","useMemo","useState","LocalNetwork","defaultChainNetworkSettings","id","proxy","useCallback","useState","useChainNetworkSettings","defaults","defaultChainNetworkSettings","networkSettings","setNetworkSettings","useState","updateNetworkSettings","useCallback","networkId","settings","prevSettings","ChainNetworkProvider","children","getActiveNetwork","networkSettings","networkSettingsProp","defaultChainNetworkSettings","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","updateNetworkSettings","useChainNetworkSettings","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","MainNetwork","previousResolvedActiveNetwork","setPreviousResolvedActiveNetwork","isDefined","updateActiveNetwork","useCallback","networkId","undefined","Error","value","useMemo","provided","chainNetworkError","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","ActiveGatewayProvider","account","children","activeNetwork","useChainNetwork","React","GatewayProvider","gatewayName","id","shouldProxy","networkSettings","networkId","isDefined","proxy","useViewerInPage","networkOverride","networkBootstrap","activeNetwork","useChainNetwork","httpRpcViewer","useHttpRpcViewer","walletRpcViewer","useViewerFromWallet","id","isUndefined","isNull","console","warn","useViewerInPageV2","gateways","useProvidedGateway","inPageGateway","walletGateway","inPageViewer","connection","viewer","walletViewer","useActiveNetworkCurrentBlock","refresh","viewer","currentBlock","useCurrentBlock","useActiveNetworkCurrentBlockInPage","useViewerInPage","useActiveNetworkCurrentBlockInWallet","useViewerFromWallet","useNetwork","useActiveNetworkNetwork","activeNetwork","useChainNetwork","network","useNetwork","id","useHttpRpcRunner","useActiveNetworkRunner","activeNetwork","useChainNetwork","runner","useHttpRpcRunner","url","isJsonRpcRequest","isJsonRpcResponse","isDefined","isString","useEffect","useState","parseRpcCall","acc","event","isJsonRpcResponse","rpcCall","castedEvent","id","result","isJsonRpcRequest","request","console","error","source","useRpcBroadcastListener","events","setEvents","useState","clearEvents","useEffect","listener","e","detail","isString","parsedDetail","JSON","parse","data","broadcastedRpcCall","timestamp","Date","now","prev","newState","isDefined","err","globalThis","addEventListener","removeEventListener","useHttpRpcViewer","useViewerInWallet","activeNetwork","useChainNetwork","walletViewer","useHttpRpcViewer","url","delay","isUndefined","useEffect","useState","STATUS_CHECK_INTERVAL","usePollNetworkStatus","network","useActiveNetworkNetwork","networkStatus","setNetworkStatus","useState","networkStatusError","setNetworkStatusError","useEffect","checkNetwork","isUndefined","response","status","undefined","error","console","info","delay","Cancel","IconButton","React","CloseDrawerIconButton","anchor","onClose","React","IconButton","onClick","e","size","sx","alignSelf","top","right","undefined","left","Cancel","fontSize","Card","Collapse","Stack","Typography","isDefined","JsonViewerEx","React","memo","useState","ArrowRight","CheckCircle","Warning","Avatar","Icon","IconButton","Stack","Tooltip","Typography","useTheme","Identicon","usePromise","isDefined","ObjectHasher","React","BroadcastedRpcCallDetailsSummaryStack","expanded","setExpanded","method","timestamp","hasResult","params","props","theme","useTheme","hash","hashError","usePromise","isDefined","ObjectHasher","React","Stack","direction","gap","alignItems","justifyContent","IconButton","size","onClick","ArrowRight","sx","transform","transition","fontSize","Tooltip","title","message","JSON","stringify","Avatar","backgroundColor","vars","palette","text","primary","width","height","opacity","Identicon","value","Typography","component","variant","fontFamily","color","Date","toLocaleString","Icon","justifySelf","CheckCircle","Warning","JSON_VIEWER_WIDTH","BroadcastedRpcCallDetailsCard","memo","rpcRequestResponsePairs","sx","props","expanded","setExpanded","useState","request","result","source","React","Card","p","display","flexDirection","width","BroadcastedRpcCallDetailsSummaryStack","params","rpcCall","hasResult","isDefined","method","timestamp","Collapse","in","mountOnEnter","unmountOnExit","Stack","direction","gap","alignItems","Typography","variant","component","fontFamily","ml","JsonViewerEx","value","maxHeight","overflow","isDefinedNotNull","useCallback","useMemo","useState","usePaginatedEventPairs","formattedEvents","numberOfVisiblePairs","onClearEvents","scrollableDiv","currentPage","setCurrentPage","useState","allEventEntries","useMemo","Object","entries","toSorted","a","b","request","timestamp","totalPages","Math","ceil","length","effectiveCurrentPage","min","visibleEvents","isDefinedNotNull","scrollTo","top","behavior","startIndex","endIndex","slice","handlePreviousPage","useCallback","prev","max","handleNextPage","handleClearEvents","handlePageChange","_event","page","BroadcastedRpcCallsDrawer","anchor","onClearEvents","drawerTitle","events","onClose","numberOfVisibleEvents","props","scrollableDiv","setScrollableDiv","useState","allEventEntries","visibleEvents","totalPages","effectiveCurrentPage","handleClearEvents","handlePageChange","usePaginatedEventPairs","React","Drawer","keepMounted","CloseDrawerIconButton","Stack","gap","sx","p","flexShrink","direction","justifyContent","alignItems","Typography","variant","Button","size","onClick","length","Pagination","count","page","onChange","color","id","flexGrow","overflowY","Box","ref","el","px","pb","map","broadcastedRpcCall","index","BroadcastedRpcCallDetailsCard","key","rpcRequestResponsePairs","mb","BroadcastedRpcCallsDrawerWithEvents","clearEvents","useRpcBroadcastListener","Avatar","React","React","NetworkIcon","icon","style","props","React","span","dangerouslySetInnerHTML","__html","display","width","height","NetworkAvatar","icon","iconStyles","name","sx","props","React","Avatar","backgroundColor","alt","NetworkIcon","style","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","sx","py","NetworkAvatar","icon","width","height","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","React","validNetworkStates","Set","NetworkStatus","children","props","networkStatus","usePollNetworkStatus","showStatus","has","state","React","NetworkStatusAlert","status","BroadcastRpcRequestEventName","BroadcastRpcResponseEventName","defaultBroadcastConfig","request","response"]}
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.20.1",
4
+ "version": "1.20.2",
5
5
  "description": "XYO Layer One React SDK",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -49,39 +49,39 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "@metamask/utils": "~11.10.0",
52
- "@xylabs/react-error": "~7.1.16",
53
- "@xylabs/react-identicon": "~7.1.16",
54
- "@xylabs/react-promise": "~7.1.16",
55
- "@xylabs/react-shared": "~7.1.16",
52
+ "@xylabs/react-error": "~7.1.17",
53
+ "@xylabs/react-identicon": "~7.1.17",
54
+ "@xylabs/react-promise": "~7.1.17",
55
+ "@xylabs/react-shared": "~7.1.17",
56
56
  "@xylabs/sdk-js": "~5.0.80",
57
57
  "@xyo-network/hash": "~5.3.15",
58
- "@xyo-network/react-chain-provider": "~1.20.1",
59
- "@xyo-network/react-chain-shared": "~1.20.1",
58
+ "@xyo-network/react-chain-provider": "~1.20.2",
59
+ "@xyo-network/react-chain-shared": "~1.20.2",
60
60
  "@xyo-network/react-payload-raw-info": "~7.5.5",
61
- "@xyo-network/xl1-sdk": "~1.25.18"
61
+ "@xyo-network/xl1-sdk": "~1.25.19"
62
62
  },
63
63
  "devDependencies": {
64
64
  "@emotion/react": "~11.14.0",
65
65
  "@emotion/styled": "~11.14.1",
66
- "@mui/icons-material": "~7.3.8",
67
- "@mui/material": "~7.3.8",
68
- "@storybook/react-vite": "^10.2.15",
66
+ "@mui/icons-material": "~7.3.9",
67
+ "@mui/material": "~7.3.9",
68
+ "@storybook/react-vite": "^10.2.16",
69
69
  "@textea/json-viewer": "^4.0.1",
70
70
  "@types/react": "~19.2.14",
71
- "@xylabs/react-button": "~7.1.16",
72
- "@xylabs/ts-scripts-yarn3": "~7.3.2",
73
- "@xylabs/tsconfig": "~7.3.2",
74
- "@xylabs/tsconfig-dom": "~7.3.2",
75
- "@xylabs/tsconfig-react": "~7.3.2",
76
- "@xyo-network/react-chain-model": "~1.20.1",
71
+ "@xylabs/react-button": "~7.1.17",
72
+ "@xylabs/ts-scripts-yarn3": "~7.4.9",
73
+ "@xylabs/tsconfig": "~7.4.9",
74
+ "@xylabs/tsconfig-dom": "~7.4.9",
75
+ "@xylabs/tsconfig-react": "~7.4.9",
76
+ "@xyo-network/react-chain-model": "~1.20.2",
77
77
  "@xyo-network/sdk-js": "~5.3.15",
78
78
  "axios": "^1.13.6",
79
- "eslint": "^9.39.3",
79
+ "eslint": "^9.39.4",
80
80
  "ethers": "^6.16.0",
81
81
  "react": "~19.2.4",
82
82
  "react-dom": "~19.2.4",
83
83
  "react-router-dom": "^7.13.1",
84
- "storybook": "^10.2.15",
84
+ "storybook": "^10.2.16",
85
85
  "typescript": "~5.9.3",
86
86
  "vite": "^7.3.1",
87
87
  "zod": "^4.3.6"
@@ -0,0 +1,19 @@
1
+ import { GatewayProvider } from '@xyo-network/react-chain-provider'
2
+ import type { AccountInstance } from '@xyo-network/sdk-js'
3
+ import type { PropsWithChildren } from 'react'
4
+ import React from 'react'
5
+
6
+ import { useChainNetwork } from './network/index.ts'
7
+
8
+ export interface ActiveGatewayProviderProps extends PropsWithChildren {
9
+ account?: AccountInstance
10
+ }
11
+
12
+ export const ActiveGatewayProvider: React.FC<ActiveGatewayProviderProps> = ({ account, children }) => {
13
+ const { activeNetwork } = useChainNetwork()
14
+ return (
15
+ <GatewayProvider gatewayName={activeNetwork?.id} account={account}>
16
+ {children}
17
+ </GatewayProvider>
18
+ )
19
+ }
@@ -1 +1,2 @@
1
+ export * from './ActiveGatewayProvider.tsx'
1
2
  export * from './network/index.ts'
@@ -1,15 +1,13 @@
1
1
  import {
2
- Alert, MenuItem, Select, Stack, Typography,
2
+ MenuItem, Select, Stack, Typography,
3
3
  } from '@mui/material'
4
4
  import type { Decorator, StoryFn } from '@storybook/react-vite'
5
5
  import { ButtonEx } from '@xylabs/react-button'
6
6
  import { ErrorRender } from '@xylabs/react-error'
7
7
  import {
8
- isDefined, isDefinedNotNull,
9
- isUndefined,
10
- isUndefinedOrNull,
8
+ isDefined, isDefinedNotNull, isUndefined, isUndefinedOrNull,
11
9
  } from '@xylabs/sdk-js'
12
- import { isXyoGlobal } from '@xyo-network/react-chain-model'
10
+ import { IframeWalletWarningDecorator } from '@xyo-network/react-chain-shared'
13
11
  import type { HydratedBlock, NetworkId } from '@xyo-network/xl1-sdk'
14
12
  import {
15
13
  LocalNetwork, MainNetwork, SequenceNetwork,
@@ -22,9 +20,6 @@ import { ChainNetworkProvider, useChainNetwork } from '../../context/index.ts'
22
20
  import { useRpcBroadcastListener } from './useRpcBroadcastListener.ts'
23
21
  import { useViewerInPage } from './useViewerInPage.ts'
24
22
 
25
- const hasXyoGlobal = isXyoGlobal(globalThis.xyo)
26
- const inIframe = globalThis.self !== window.top
27
-
28
23
  const UseViewerInPageStoryDecorator: Decorator = (Story, args) => {
29
24
  return (
30
25
  <ChainNetworkProvider networkSettings={networkSettings}>
@@ -89,20 +84,6 @@ const UseViewerInPageStoryTemplate: React.FC = () => {
89
84
 
90
85
  return (
91
86
  <Stack gap={2} alignItems="center">
92
- {inIframe
93
- ? (
94
- <Alert severity="warning">
95
- This story is running in an iframe. Please run it in a standalone browser window to test the wallet extension.
96
- </Alert>
97
- )
98
- : null}
99
- {hasXyoGlobal
100
- ? null
101
- : (
102
- <Alert severity="warning">
103
- No wallet extension found. Please install the Xyo Wallet Chrome Extension.
104
- </Alert>
105
- )}
106
87
  <BroadcastedRpcCallsDrawer
107
88
  open={drawerOpen}
108
89
  events={events}
@@ -139,10 +120,10 @@ export default {
139
120
  const Template: StoryFn<typeof UseViewerInPageStoryTemplate> = args => <UseViewerInPageStoryTemplate {...args} />
140
121
 
141
122
  const Default = Template.bind({})
142
- Default.decorators = [UseViewerInPageStoryDecorator]
123
+ Default.decorators = [IframeWalletWarningDecorator, UseViewerInPageStoryDecorator]
143
124
  Default.args = {}
144
125
  const Proxy = Template.bind({})
145
- Proxy.decorators = [UseViewerInPageStoryProxyDecorator]
126
+ Proxy.decorators = [IframeWalletWarningDecorator, UseViewerInPageStoryProxyDecorator]
146
127
  Proxy.args = {}
147
128
 
148
129
  export { Default, Proxy }
@@ -0,0 +1,135 @@
1
+ import {
2
+ MenuItem, Select, Stack, Typography,
3
+ } from '@mui/material'
4
+ import type { Decorator, StoryFn } from '@storybook/react-vite'
5
+ import { ButtonEx } from '@xylabs/react-button'
6
+ import { ErrorRender } from '@xylabs/react-error'
7
+ import {
8
+ isDefined, isDefinedNotNull, isUndefined, isUndefinedOrNull,
9
+ } from '@xylabs/sdk-js'
10
+ import { IframeWalletWarningDecorator } from '@xyo-network/react-chain-shared'
11
+ import type { HydratedBlock, NetworkId } from '@xyo-network/xl1-sdk'
12
+ import {
13
+ LocalNetwork, MainNetwork, SequenceNetwork,
14
+ } from '@xyo-network/xl1-sdk'
15
+ import React, { useCallback, useState } from 'react'
16
+
17
+ import { BroadcastedRpcCallsDrawer } from '../../components/index.ts'
18
+ import type { ChainNetworkSettings } from '../../context/index.ts'
19
+ import {
20
+ ActiveGatewayProvider, ChainNetworkProvider, useChainNetwork,
21
+ } from '../../context/index.ts'
22
+ import { useRpcBroadcastListener } from './useRpcBroadcastListener.ts'
23
+ import { useViewerInPageV2 } from './useViewerInPage.ts'
24
+
25
+ const AvailableNetworks = [MainNetwork, SequenceNetwork, LocalNetwork]
26
+ const networkSettings: ChainNetworkSettings = { [LocalNetwork.id]: { proxy: true } }
27
+ const getActiveNetwork = async () => await Promise.resolve(AvailableNetworks[2])
28
+
29
+ const UseViewerInPageV2StoryDecorator: Decorator = (Story, args) => {
30
+ return (
31
+ <ChainNetworkProvider networks={AvailableNetworks} networkSettings={networkSettings} getActiveNetwork={getActiveNetwork}>
32
+ <ActiveGatewayProvider>
33
+ <Story {...args} />
34
+ </ActiveGatewayProvider>
35
+ </ChainNetworkProvider>
36
+ )
37
+ }
38
+
39
+ const UseViewerInPageV2StoryProxyDecorator: Decorator = (Story, args) => {
40
+ return (
41
+ <ChainNetworkProvider networks={AvailableNetworks} networkSettings={networkSettings} getActiveNetwork={getActiveNetwork}>
42
+ <ActiveGatewayProvider>
43
+ <StubNetworkSelector />
44
+ <Story {...args} />
45
+ </ActiveGatewayProvider>
46
+ </ChainNetworkProvider>
47
+ )
48
+ }
49
+
50
+ const StubNetworkSelector: React.FC = () => {
51
+ const { updateActiveNetwork } = useChainNetwork()
52
+ return (
53
+ <Select size="small" defaultValue={LocalNetwork.id} onChange={event => updateActiveNetwork?.(event.target.value as NetworkId)}>
54
+ {AvailableNetworks.map(network => (
55
+ <MenuItem key={network.id} value={network.id}>{network.name}</MenuItem>
56
+ ))}
57
+ </Select>
58
+ )
59
+ }
60
+
61
+ const UseViewerInPageV2StoryTemplate: React.FC = () => {
62
+ const viewer = useViewerInPageV2()
63
+ const [error, setError] = useState<Error | null>(null)
64
+ const [result, setResult] = useState<HydratedBlock | null | undefined>()
65
+ const [loading, setLoading] = useState(false)
66
+ const [drawerOpen, setDrawerOpen] = useState(false)
67
+ const { clearEvents, events } = useRpcBroadcastListener()
68
+
69
+ const handleClick = useCallback(async () => {
70
+ if (isDefinedNotNull(viewer)) {
71
+ try {
72
+ setError(null)
73
+ setResult(undefined)
74
+ setLoading(true)
75
+ const block = await viewer.currentBlock()
76
+ setError(null)
77
+ setResult(block)
78
+ setLoading(false)
79
+ } catch (err) {
80
+ setError(err as Error)
81
+ setResult(undefined)
82
+ setLoading(false)
83
+ }
84
+ }
85
+ }, [viewer])
86
+
87
+ if (isDefined(viewer) && isUndefined(result) && isUndefinedOrNull(error) && !loading) {
88
+ void handleClick()
89
+ }
90
+
91
+ return (
92
+ <Stack gap={2} alignItems="center">
93
+ <BroadcastedRpcCallsDrawer
94
+ open={drawerOpen}
95
+ events={events}
96
+ onClearEvents={clearEvents}
97
+ onClose={() => setDrawerOpen(false)}
98
+ />
99
+ <ButtonEx disabled={Object.keys(events).length === 0} variant="contained" onClick={() => setDrawerOpen(true)}>
100
+ Show Broadcasted RPC Calls
101
+ </ButtonEx>
102
+ <ButtonEx loading={loading} variant="contained" onClick={() => void handleClick()} disabled={!isDefined(viewer)}>
103
+ Get Current Block
104
+ </ButtonEx>
105
+ {isDefined(result)
106
+ ? (
107
+ <Typography variant="h4">
108
+ Block:
109
+ {result?.[0].block}
110
+ </Typography>
111
+ )
112
+ : null}
113
+ <pre>
114
+ {JSON.stringify(result, null, 2)}
115
+ </pre>
116
+ <ErrorRender error={error} />
117
+ </Stack>
118
+ )
119
+ }
120
+
121
+ export default {
122
+ title: 'provider/useViewerInPageV2',
123
+ component: UseViewerInPageV2StoryTemplate,
124
+ }
125
+
126
+ const Template: StoryFn<typeof UseViewerInPageV2StoryTemplate> = args => <UseViewerInPageV2StoryTemplate {...args} />
127
+
128
+ const Default = Template.bind({})
129
+ Default.decorators = [UseViewerInPageV2StoryDecorator]
130
+ Default.args = {}
131
+ const Proxy = Template.bind({})
132
+ Proxy.decorators = [IframeWalletWarningDecorator, UseViewerInPageV2StoryProxyDecorator]
133
+ Proxy.args = {}
134
+
135
+ export { Default, Proxy }
@@ -3,12 +3,14 @@ import type { XyoViewer } from '@xyo-network/xl1-sdk'
3
3
 
4
4
  import { useViewerInPage } from './useViewerInPage.ts'
5
5
 
6
+ /* @deprecated - use useCurrentBlock from @xyo-network/react-chain-provider instead */
6
7
  export const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {
7
8
  const currentBlock = useCurrentBlock(refresh, viewer)
8
9
 
9
10
  return currentBlock
10
11
  }
11
12
 
13
+ /* @deprecated - use useCurrentBlock from @xyo-network/react-chain-provider instead */
12
14
  export const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {
13
15
  const viewer = useViewerInPage()
14
16
  const currentBlock = useCurrentBlock(refresh, viewer)
@@ -2,6 +2,7 @@ import { useNetwork } from '@xyo-network/react-chain-provider'
2
2
 
3
3
  import { useChainNetwork } from '../../context/index.ts'
4
4
 
5
+ /* @deprecated - use useNetworkFromGateway from @xyo-network/react-chain-provider instead */
5
6
  export const useActiveNetworkNetwork = () => {
6
7
  const { activeNetwork } = useChainNetwork()
7
8
  const network = useNetwork(activeNetwork?.id)