@xyo-network/react-chain-provider 1.17.7 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/hooks/useHttpRpcRunner.d.ts +2 -2
- package/dist/browser/hooks/useHttpRpcRunner.d.ts.map +1 -1
- package/dist/browser/hooks/viewer/useCheckRpc.d.ts.map +1 -1
- package/dist/browser/hooks/viewer/useHttpRpcViewer.d.ts +1 -1
- package/dist/browser/hooks/viewer/useHttpRpcViewer.d.ts.map +1 -1
- package/dist/browser/index.mjs +44 -35
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +13 -12
- package/src/hooks/account/useAccountBalanceHistory.ts +2 -2
- package/src/hooks/useHttpRpcRunner.ts +10 -7
- package/src/hooks/viewer/useCheckRpc.ts +11 -9
- package/src/hooks/viewer/useHttpRpcViewer.ts +10 -7
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { JsonRpcXyoRunner } from '@xyo-network/xl1-rpc';
|
|
2
|
-
export declare const useHttpRpcRunner: (url?: string) => JsonRpcXyoRunner | undefined;
|
|
1
|
+
import type { JsonRpcXyoRunner } from '@xyo-network/xl1-rpc';
|
|
2
|
+
export declare const useHttpRpcRunner: (url?: string) => [import("@xyo-network/xl1-protocol-sdk").CreatableProviderInstance<JsonRpcXyoRunner> | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
|
|
3
3
|
//# sourceMappingURL=useHttpRpcRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpRpcRunner.d.ts","sourceRoot":"","sources":["../../../src/hooks/useHttpRpcRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHttpRpcRunner.d.ts","sourceRoot":"","sources":["../../../src/hooks/useHttpRpcRunner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,sBAAsB,CAAA;AAG7B,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,sLAS5C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCheckRpc.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useCheckRpc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCheckRpc.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useCheckRpc.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,gBAAgB;;;CAG5B,CAAA;AAED,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM;;;CAgC5C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpRpcViewer.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useHttpRpcViewer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHttpRpcViewer.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useHttpRpcViewer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,+BAA+B,CAAA;AAOhF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,SAAS,GAAG,SAW3D,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -103,15 +103,19 @@ var useAccountBalanceHistory = /* @__PURE__ */ __name((address, viewer, maxPage
|
|
|
103
103
|
let lastBlock;
|
|
104
104
|
const pagedHistory = [];
|
|
105
105
|
const resolvedStartBlock = blockRange ? blockRange[0] : 0;
|
|
106
|
-
const history = await viewer.accountBalanceHistory(address, blockRange
|
|
106
|
+
const history = await viewer.accountBalanceHistory(address, blockRange ? {
|
|
107
|
+
range: blockRange
|
|
108
|
+
} : {});
|
|
107
109
|
if (history.length > 0) {
|
|
108
110
|
pagedHistory.push(...history);
|
|
109
111
|
lastBlock = findMinimumBlock(history);
|
|
110
112
|
while (page < maxPage) {
|
|
111
|
-
const nextHistory = await viewer.accountBalanceHistory(address,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
const nextHistory = await viewer.accountBalanceHistory(address, {
|
|
114
|
+
range: [
|
|
115
|
+
resolvedStartBlock,
|
|
116
|
+
lastBlock
|
|
117
|
+
]
|
|
118
|
+
});
|
|
115
119
|
if (nextHistory.length === 0) break;
|
|
116
120
|
lastBlock = findMinimumBlock(nextHistory);
|
|
117
121
|
pagedHistory.push(...nextHistory);
|
|
@@ -605,16 +609,21 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
|
605
609
|
}, "useCurrentBlock");
|
|
606
610
|
|
|
607
611
|
// src/hooks/useHttpRpcRunner.ts
|
|
612
|
+
import { usePromise as usePromise6 } from "@xylabs/react-promise";
|
|
608
613
|
import { isUndefined as isUndefined4 } from "@xylabs/sdk-js";
|
|
609
|
-
import {
|
|
610
|
-
import {
|
|
614
|
+
import { XyoRunnerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
615
|
+
import { buildJsonRpcProviderLocator } from "@xyo-network/xl1-providers";
|
|
616
|
+
import { HttpRpcTransport } from "@xyo-network/xl1-rpc";
|
|
611
617
|
var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
|
|
612
|
-
return
|
|
618
|
+
return usePromise6(async () => {
|
|
613
619
|
if (isUndefined4(url)) {
|
|
614
620
|
return;
|
|
615
621
|
}
|
|
616
|
-
const
|
|
617
|
-
|
|
622
|
+
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport(`${url}/rpc`, schemas), "transportFactory");
|
|
623
|
+
const locator = await buildJsonRpcProviderLocator({
|
|
624
|
+
transportFactory
|
|
625
|
+
});
|
|
626
|
+
return await locator.getInstance(XyoRunnerMoniker);
|
|
618
627
|
}, [
|
|
619
628
|
url
|
|
620
629
|
]);
|
|
@@ -623,9 +632,9 @@ var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
|
|
|
623
632
|
// src/hooks/useNetwork.ts
|
|
624
633
|
import { isUndefined as isUndefined5 } from "@xylabs/sdk-js";
|
|
625
634
|
import { SimpleXyoNetwork } from "@xyo-network/xl1-protocol-sdk";
|
|
626
|
-
import { useMemo as
|
|
635
|
+
import { useMemo as useMemo2 } from "react";
|
|
627
636
|
var useNetwork = /* @__PURE__ */ __name((id) => {
|
|
628
|
-
const network =
|
|
637
|
+
const network = useMemo2(() => {
|
|
629
638
|
if (isUndefined5(id)) return;
|
|
630
639
|
return new SimpleXyoNetwork(id);
|
|
631
640
|
}, [
|
|
@@ -636,18 +645,21 @@ var useNetwork = /* @__PURE__ */ __name((id) => {
|
|
|
636
645
|
|
|
637
646
|
// src/hooks/useSigner.ts
|
|
638
647
|
import { SimpleXyoSigner } from "@xyo-network/xl1-protocol-sdk";
|
|
639
|
-
import { useMemo as
|
|
648
|
+
import { useMemo as useMemo3 } from "react";
|
|
640
649
|
var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
641
|
-
return
|
|
650
|
+
return useMemo3(() => account ? new SimpleXyoSigner(account) : void 0, [
|
|
642
651
|
account
|
|
643
652
|
]);
|
|
644
653
|
}, "useSigner");
|
|
645
654
|
|
|
646
655
|
// src/hooks/viewer/useCheckRpc.ts
|
|
656
|
+
import { usePromise as usePromise7 } from "@xylabs/react-promise";
|
|
647
657
|
import { delay as delay2, isDefined as isDefined6, isUndefined as isUndefined6 } from "@xylabs/sdk-js";
|
|
648
658
|
import { LocalNetwork, SequenceNetwork } from "@xyo-network/xl1-network-model";
|
|
649
|
-
import {
|
|
650
|
-
import {
|
|
659
|
+
import { XyoViewerMoniker } from "@xyo-network/xl1-protocol-sdk";
|
|
660
|
+
import { buildJsonRpcProviderLocator as buildJsonRpcProviderLocator2 } from "@xyo-network/xl1-providers";
|
|
661
|
+
import { HttpRpcTransport as HttpRpcTransport2 } from "@xyo-network/xl1-rpc";
|
|
662
|
+
import { useEffect as useEffect3, useState as useState4 } from "react";
|
|
651
663
|
var INTERVAL = 5e3;
|
|
652
664
|
var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
|
|
653
665
|
var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
|
|
@@ -662,16 +674,13 @@ var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
|
|
|
662
674
|
var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
663
675
|
const [isLocalProducer, setIsLocalProducer] = useState4(false);
|
|
664
676
|
const [error, setError] = useState4();
|
|
665
|
-
const viewer =
|
|
677
|
+
const [viewer] = usePromise7(async () => {
|
|
666
678
|
if (isUndefined6(endpoint)) return;
|
|
667
|
-
const
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
});
|
|
671
|
-
const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport);
|
|
672
|
-
const viewer2 = new JsonRpcXyoViewer(transport, {
|
|
673
|
-
networkStakeViewer
|
|
679
|
+
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport2(endpoint, schemas), "transportFactory");
|
|
680
|
+
const locator = await buildJsonRpcProviderLocator2({
|
|
681
|
+
transportFactory
|
|
674
682
|
});
|
|
683
|
+
const viewer2 = await locator.getInstance(XyoViewerMoniker);
|
|
675
684
|
return viewer2;
|
|
676
685
|
}, [
|
|
677
686
|
endpoint
|
|
@@ -701,21 +710,21 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
701
710
|
}, "useCheckRpc");
|
|
702
711
|
|
|
703
712
|
// src/hooks/viewer/useHttpRpcViewer.ts
|
|
713
|
+
import { usePromise as usePromise8 } from "@xylabs/react-promise";
|
|
704
714
|
import { isUndefined as isUndefined7 } from "@xylabs/sdk-js";
|
|
705
|
-
import {
|
|
706
|
-
import {
|
|
715
|
+
import { XyoViewerMoniker as XyoViewerMoniker2 } from "@xyo-network/xl1-protocol-sdk";
|
|
716
|
+
import { buildJsonRpcProviderLocator as buildJsonRpcProviderLocator3 } from "@xyo-network/xl1-providers";
|
|
717
|
+
import { HttpRpcTransport as HttpRpcTransport3 } from "@xyo-network/xl1-rpc";
|
|
707
718
|
var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
708
|
-
const resolvedViewer =
|
|
719
|
+
const [resolvedViewer] = usePromise8(async () => {
|
|
709
720
|
if (isUndefined7(url)) {
|
|
710
721
|
return;
|
|
711
722
|
}
|
|
712
|
-
const
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
});
|
|
716
|
-
return new JsonRpcXyoViewer2(transport, {
|
|
717
|
-
networkStakeViewer: new JsonRpcNetworkStakeViewer2(transport)
|
|
723
|
+
const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport3(`${url}/rpc`, schemas), "transportFactory");
|
|
724
|
+
const locator = await buildJsonRpcProviderLocator3({
|
|
725
|
+
transportFactory
|
|
718
726
|
});
|
|
727
|
+
return await locator.getInstance(XyoViewerMoniker2);
|
|
719
728
|
}, [
|
|
720
729
|
url
|
|
721
730
|
]);
|
|
@@ -723,11 +732,11 @@ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
|
723
732
|
}, "useHttpRpcViewer");
|
|
724
733
|
|
|
725
734
|
// src/hooks/viewer/useViewerFromWallet.ts
|
|
726
|
-
import { usePromise as
|
|
735
|
+
import { usePromise as usePromise9 } from "@xylabs/react-promise";
|
|
727
736
|
import { isDefined as isDefined7, isDefinedNotNull as isDefinedNotNull3, isNull as isNull4 } from "@xylabs/sdk-js";
|
|
728
737
|
var useViewerFromWallet = /* @__PURE__ */ __name((networkId, timeout) => {
|
|
729
738
|
const { gateway, error, isLoading, timedout } = useGateway(networkId, timeout);
|
|
730
|
-
const result =
|
|
739
|
+
const result = usePromise9(async () => {
|
|
731
740
|
if (isDefinedNotNull3(error)) return null;
|
|
732
741
|
if (isLoading) return;
|
|
733
742
|
if (timedout && isNull4(gateway)) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/connected/account/Connected.tsx","../../src/components/connected/ConnectAccountsStack.tsx","../../src/hooks/account/helpers/formatAccountBalanceHistory.ts","../../src/hooks/account/useAccountBalanceHistory.ts","../../src/lib/balanceForRange.ts","../../src/lib/findMinimumBlock.ts","../../src/hooks/client/useClient.ts","../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/helpers/transaction/Confirmation.ts","../../src/hooks/client/permissions/usePermissions.ts","../../src/hooks/client/permissions/usePermissionsAccounts.ts","../../src/hooks/client/helpers/findCaveat.ts","../../src/hooks/client/useGateway.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConfirmTransactionBase.ts","../../src/hooks/useConnectAccount.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts"],"sourcesContent":["import {\n Stack, Tooltip, Typography,\n} from '@mui/material'\nimport { EthAddressWrapper } from '@xylabs/sdk-js'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport const ConnectedAccount: React.FC<{ address: string }> = ({ address }) => {\n const shortenedAddress = `${EthAddressWrapper.fromString(address)?.toShortString(4)}`\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <BlockiesAvatarAddress address={address} size={21} />\n <Tooltip title={address}>\n <Typography color=\"textSecondary\" variant=\"caption\" fontFamily=\"monospace\">{shortenedAddress}</Typography>\n </Tooltip>\n </Stack>\n )\n}\n","import type { StackProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button, Stack,\n Typography,\n} from '@mui/material'\nimport type { ButtonExProps } from '@xylabs/react-button'\nimport { ButtonEx } from '@xylabs/react-button'\nimport type { Address } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { ComponentType, MouseEventHandler } from 'react'\nimport React, { useEffect } from 'react'\n\nimport { useConnectAccount } from '../../hooks/index.ts'\nimport { ConnectedAccount } from './account/index.ts'\n\nconst DefaultConnectComponent: React.FC<ButtonExProps> = props => (\n <ButtonEx variant=\"contained\" size=\"small\" {...props} />\n)\n\nconst DefaultNoWalletInstalledComponent: React.FC = () => (\n <Alert severity=\"warning\">\n <AlertTitle>XL1 Wallet Not Found</AlertTitle>\n <Typography gutterBottom>\n Please ensure that your XL1 Wallet is installed to connect your account.\n </Typography>\n <Button\n sx={{ display: 'flex', justifySelf: 'end' }}\n size=\"small\"\n variant=\"outlined\"\n href=\"https://chromewebstore.google.com/detail/xl1-wallet/fblbagcjeigmhakkfgjpdlcapcgmcfbm\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Get XL1 Wallet\n </Button>\n </Alert>\n)\n\nexport interface ConnectClientAccountsStackProps extends StackProps {\n AccountComponent?: ComponentType<{ account?: string }>\n ConnectComponent?: ComponentType<{ onClick?: MouseEventHandler<HTMLElement> }>\n NoWalletInstalledComponent?: ComponentType\n onAccountConnected?: (account: Address) => void\n onCancel?: () => void\n timeout?: number\n}\n\nexport const ConnectAccountsStack: React.FC<ConnectClientAccountsStackProps> = ({\n AccountComponent = ConnectedAccount,\n ConnectComponent = DefaultConnectComponent,\n NoWalletInstalledComponent = DefaultNoWalletInstalledComponent,\n onAccountConnected,\n onCancel,\n timeout,\n ...props\n}) => {\n const {\n address, connectSigner, error, timedout,\n } = useConnectAccount(undefined, timeout)\n\n useEffect(() => {\n if (isDefined(error) && isDefined(onCancel)) {\n onCancel()\n }\n }, [error, onCancel])\n\n useEffect(() => {\n if (isDefined(address) && isDefined(onAccountConnected)) {\n onAccountConnected(address)\n }\n }, [address, onAccountConnected])\n\n return (\n <Stack direction=\"row\" alignItems=\"start\" spacing={2} {...props}>\n {isDefined(address)\n ? <AccountComponent address={address} />\n : null}\n {isUndefined(address) && !timedout\n ? (\n <ConnectComponent onClick={() => void connectSigner()}>Connect</ConnectComponent>\n )\n : null}\n {isUndefined(address) && timedout\n ? (\n <NoWalletInstalledComponent />\n )\n : null}\n <ErrorRender error={error} scope=\"ConnectSigner:error\" />\n </Stack>\n )\n}\n","import type { Address, Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt } from '@xylabs/sdk-js'\nimport type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { AccountBalanceHistoryItemFormatted } from '../BalanceHistoryItemFormatted.ts'\n\nexport const formatAccountBalanceHistory = (address: Address, history: AccountBalanceHistoryItem[]): AccountBalanceHistoryItemFormatted[] => {\n let results: AccountBalanceHistoryItemFormatted[] = []\n for (const item of history) {\n const [blockBw, txBw, transfer] = item\n if (address === transfer.from) {\n for (const [to, amount] of Object.entries(transfer.transfers)) {\n results.push({\n amount: hexToBigInt(amount as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n timestamp: blockBw.$epoch,\n key: globalThis.crypto.randomUUID(),\n to: to as Address,\n txHash: txBw?._hash,\n debug: item,\n type: 'send',\n })\n }\n } else {\n results.push({\n amount: hexToBigInt(transfer.transfers[address] as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n key: globalThis.crypto.randomUUID(),\n timestamp: blockBw.$epoch,\n to: address,\n txHash: txBw?._hash,\n debug: item,\n type: 'receive',\n })\n }\n }\n return results\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n type Address,\n isUndefined,\n} from '@xylabs/sdk-js'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { balanceForRange, findMinimumBlock } from '../../lib/index.ts'\nimport { formatAccountBalanceHistory } from './helpers/index.ts'\n\nexport const useAccountBalanceHistory = (address?: Address, viewer?: XyoViewer, maxPage = 10, blockRange?: XL1BlockRange, refresh?: number) => {\n return usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n // Pagination Values\n let page = 1\n let lastBlock: number\n const pagedHistory: AccountBalanceHistoryItem[] = []\n const resolvedStartBlock = blockRange ? blockRange[0] : 0\n\n // Fetch first page to get starting lastBlock\n // If blockRange is provided, use that for the first fetch, otherwise the api will use [0, currentBlock]\n const history = await viewer.accountBalanceHistory(address, blockRange)\n if (history.length > 0) {\n pagedHistory.push(...history)\n // Set lastBlock to one less than the lowest block in the first page\n lastBlock = findMinimumBlock(history)\n while (page < maxPage) {\n // Fetch next page\n const nextHistory = await viewer.accountBalanceHistory(address, [resolvedStartBlock, lastBlock] as XL1BlockRange)\n // Break if no more history\n if (nextHistory.length === 0) break\n // Update lastBlock and append to pagedHistory\n lastBlock = findMinimumBlock(nextHistory)\n pagedHistory.push(...nextHistory)\n // Increment page\n // Even if we are going to go over and break the loop, we still want to increment to show the answer was truncated\n page++\n }\n }\n const formattedHistory = formatAccountBalanceHistory(address, pagedHistory)\n\n return {\n history: formattedHistory,\n balance: balanceForRange(address, pagedHistory),\n truncated: page >= maxPage,\n }\n }, [address, viewer, refresh, blockRange, maxPage])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n hexToBigInt, isHex, toHex,\n} from '@xylabs/sdk-js'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const balanceForRange = (address: Address, results: AccountBalanceHistoryItem[]): [AttoXL1, AttoXL1] => {\n const totalReceivedBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return a + hexToBigInt(transfer.transfers[address] ?? toHex(0))\n }, 0n)\n // eslint-disable-next-line unicorn/no-array-reduce\n const totalSentBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return (transfer.from === address) ? a + Object.values(transfer.transfers).reduce((a, v) => a + (isHex(v) ? hexToBigInt(v) : 0n), 0n) : a\n }, 0n)\n return [totalReceivedBalance, totalSentBalance] as [AttoXL1, AttoXL1]\n}\n","import type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const findMinimumBlock = (history: AccountBalanceHistoryItem[]): number => {\n // since taking Math.min of an empty array returns Infinity\n if (history.length === 0) return 0\n const blockNumbers = history.map(([blockBw]) => blockBw.block)\n const min = Math.min(...blockNumbers)\n return Math.max(min - 1, 0)\n}\n","import { isNull } from '@xylabs/sdk-js'\nimport type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useCallback, useEffect, useSyncExternalStore,\n} from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n timedout: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n timedout: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async (timeout?: number) => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient(timeout)\n if (client === null) {\n updateState({ timedout: true, isLoading: false })\n return\n }\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n console.error('Error initializing XyoClient', error)\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void, timeout?: number) => {\n listeners.add(listener)\n\n void initializeClient(timeout)\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = (timeout?: number) => {\n const subscribeWithTimeout = useCallback((listener: () => void) => subscribe(listener, timeout), [timeout])\n const clientState = useSyncExternalStore(subscribeWithTimeout, getSnapshot)\n\n useEffect(() => {\n // if client appears after timeout\n let listener = () => {\n // Update state when client becomes available\n updateState({\n client: globalThis.xyo?.client,\n isLoading: false,\n error: null,\n })\n // Notify listeners of the change\n emitChange()\n }\n // If we have timed out and still no client, listen for the plugin-ready event\n if (clientState.timedout && isNull(clientState.client) && !clientState.isLoading) {\n globalThis.addEventListener('xyo:plugin-ready', listener)\n }\n\n return () => {\n globalThis.removeEventListener('xyo:plugin-ready', listener)\n }\n })\n\n return clientState\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\n\nconst CLIENT_LISTENER_TIMEOUT = 500\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, timeout: number, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n globalThis.removeEventListener('xyo:plugin-ready', listener)\n onTimeout()\n }\n }, timeout)\n}\n\ntype ReturnType = XyoClient | undefined | null\n\nexport async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT): Promise<ReturnType> {\n // if no xyo object, we can bail early\n if (isUndefined(globalThis.xyo)) {\n return null\n }\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<ReturnType>((resolve) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n timeout,\n () => {\n resolve(null)\n },\n )\n })\n}\n","import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, forget, isDefined, isNull,\n} from '@xylabs/sdk-js'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport type ConfirmationStatusUpdate = {\n blockNumber: number\n confirmed: boolean\n error?: Error\n progress?: number\n remainingBlocks?: number\n}\n\nexport type TransactionConfirmationParams = {\n onStatusUpdate?: (status: ConfirmationStatusUpdate) => void\n transaction: SignedHydratedTransaction\n txHash: Hash\n viewer: XyoViewer\n}\n\nexport class TransactionConfirmationStatus {\n private readonly _params: TransactionConfirmationParams\n private active = false\n\n constructor(params: TransactionConfirmationParams) {\n this._params = params\n }\n\n get exp(): number {\n return assertEx(this.transaction[0].exp, () => 'exp is not found, transaction is not set')\n }\n\n get nbf(): number {\n return assertEx(this.transaction[0].nbf, () => 'nbf is not found, transaction is not set')\n }\n\n get onStatusUpdate(): TransactionConfirmationParams['onStatusUpdate'] {\n return this._params.onStatusUpdate\n }\n\n get params(): TransactionConfirmationParams {\n return this._params\n }\n\n get transaction(): SignedHydratedTransaction {\n return this.params.transaction\n }\n\n get txHash(): Hash {\n return this.params.txHash\n }\n\n get viewer(): XyoViewer {\n return this.params.viewer\n }\n\n static create(params: TransactionConfirmationParams): Promisable<TransactionConfirmationStatus> {\n return new TransactionConfirmationStatus(params)\n }\n\n async start(): Promise<void> {\n this.active = true\n try {\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n while (isDefined(currentBlockNumber) && this.active) {\n await this.checkBlock(currentBlockNumber)\n // check block every second to see if the transaction is confirmed\n await delay(1000)\n }\n } catch (error) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: error instanceof Error ? error : new Error('Unknown error occurred'),\n confirmed: false,\n blockNumber: 0,\n progress: 0,\n remainingBlocks: 0,\n }))\n }\n }\n\n stop(): Promisable<void> {\n this.active = false\n }\n\n private async checkBlock(blockNumber: number): Promise<void> {\n if (blockNumber < this.nbf) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: new Error(`Block number: ${blockNumber} is before ${this.nbf}`),\n confirmed: false,\n blockNumber,\n progress: 0,\n remainingBlocks: this.exp - blockNumber,\n }))\n }\n if (blockNumber > this.exp) {\n forget(this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress: 100, remainingBlocks: 0,\n }))\n return\n }\n if (blockNumber < this.exp) {\n await this.checkConfirmation(blockNumber)\n }\n }\n\n private async checkConfirmation(blockNumber: number): Promise<void> {\n const remainingBlocks = this.exp - blockNumber\n const progress = Math.round(((blockNumber - this.nbf) / (this.exp - this.nbf)) * 100)\n\n const tx = await this.viewer.transactionByHash?.(this.txHash)\n if (isNull(tx)) {\n this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress, remainingBlocks,\n })\n } else {\n this.onStatusUpdate?.({\n confirmed: true, blockNumber, progress, remainingBlocks,\n })\n await this.stop()\n }\n }\n}\n","import { useClient } from '../useClient.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClient()\n const permissions = client?.permissions\n return {\n permissions,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { JsonValue } from '@xylabs/sdk-js'\nimport {\n isArray, isDefined, isDefinedNotNull, isString,\n} from '@xylabs/sdk-js'\n\nimport { findCaveat } from '../helpers/index.ts'\nimport { usePermissions } from './usePermissions.ts'\n\nconst validateRestrictedAccounts = (restrictedAccounts: JsonValue): readonly string [] => {\n if (isDefined(restrictedAccounts)) {\n if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {\n return restrictedAccounts\n }\n throw new Error(\n `Unrecognized format for restrictReturnedAccounts caveat found on permissions. \\n\n Should be an array of strings: ${JSON.stringify(restrictedAccounts)}`,\n )\n }\n return []\n}\n\nexport const useAccountPermissions = () => {\n const { permissions, error } = usePermissions()\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) throw error\n if (isDefined(permissions)) {\n const restrictedAccounts = await findCaveat(\n permissions,\n // TODO - extract to constant in protocol package\n 'xyoWallet_getAccounts',\n 'restrictReturnedAccounts',\n )\n return validateRestrictedAccounts(restrictedAccounts)\n }\n }, [permissions])\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type {\n CaveatTypes, ParentCapability, XyoPermissions,\n} from '@xyo-network/xl1-protocol-sdk'\n\nexport const findCaveat = async (\n permissions: XyoPermissions,\n targetCapability: ParentCapability,\n targetCaveatType: CaveatTypes,\n) => {\n const existingPermissions = await permissions.getPermissions()\n if (isDefined(existingPermissions) && existingPermissions.length > 0) {\n const foundPermissions = existingPermissions\n .find(p => p.parentCapability === targetCapability)\n if (isDefined(foundPermissions)) {\n return foundPermissions.caveats?.find(caveat => caveat.type === targetCaveatType)?.value ?? []\n }\n }\n return existingPermissions\n}\n","import { isDefined, isNull } from '@xylabs/sdk-js'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName, timeout?: number) => {\n const {\n client, isLoading, error, timedout,\n } = useClient(timeout)\n\n const resolveGateway = () => {\n // null client means we do not have to wait for timedout\n if (isNull(client)) return null\n if (timedout && !isLoading && isDefined(gatewayName)) {\n return null\n }\n return client?.gateways?.[gatewayName!]\n }\n\n return {\n gateway: gatewayName ? resolveGateway() : undefined,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { Address } from '@xylabs/sdk-js'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/sdk-js'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useMemo, useRef, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n const balancePromiseRef = useRef<Promise<AttoXL1> | null>(null)\n usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n setLoading(true)\n setBalancesError(undefined)\n\n // Create and store the current promise\n const currentPromise = viewer.accountBalance(address) as Promise<AttoXL1>\n balancePromiseRef.current = currentPromise\n\n try {\n const result = await currentPromise\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n } catch (err) {\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err as Error)\n setLoading(false)\n }\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { Hash } from '@xylabs/sdk-js'\nimport {\n forget, isDefined, isHash,\n} from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoRunner, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport { useEffect, useState } from 'react'\n\nimport type { ConfirmationStatusUpdate, TransactionConfirmationParams } from './helpers/index.ts'\nimport { TransactionConfirmationStatus } from './helpers/index.ts'\n\nexport const useConfirmTransactionBase = (\n // The transaction to confirm\n transaction?: SignedHydratedTransaction,\n // Callback for when the transaction is broadcast to the network\n onBroadcast?: (hash: Hash) => void,\n // Optional callback for status updates during confirmation\n onStatusUpdate?: TransactionConfirmationParams['onStatusUpdate'],\n // Runner to use for broadcasting transactions\n runner?: XyoRunner,\n // Viewer to use for checking transaction status\n viewer?: XyoViewer,\n) => {\n const [status, setStatus] = useState<ConfirmationStatusUpdate>()\n const onStatusUpdateLocal = (newStatus: ConfirmationStatusUpdate) => {\n setStatus(newStatus)\n onStatusUpdate?.(newStatus)\n }\n\n const [transactionConfirmationStatus, transactionConfirmationError] = usePromise(async () => {\n const hasRunner = isDefined(runner)\n if (transaction && viewer) {\n const hash = hasRunner ? (await runner.broadcastTransaction(transaction)) : await PayloadBuilder.hash(transaction[0])\n if (isHash(hash)) {\n if (hasRunner && isDefined(onBroadcast)) onBroadcast(hash)\n const params: TransactionConfirmationParams = {\n onStatusUpdate: onStatusUpdateLocal,\n transaction,\n txHash: hash,\n viewer,\n }\n const instance = await TransactionConfirmationStatus.create(params)\n await instance.start()\n return instance\n } else {\n throw new Error('unexpected return type from broadcast transaction')\n }\n }\n }, [transaction, runner, viewer])\n\n useEffect(() => {\n return () => {\n if (transactionConfirmationStatus) {\n // Stop the transaction confirmation status instance when the component unmounts\n forget(transactionConfirmationStatus.stop())\n }\n }\n }, [transactionConfirmationStatus])\n\n return { status, transactionConfirmationError }\n}\n","import { type Address, asAddress } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MainNetwork } from '@xyo-network/xl1-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGateway } from './client/index.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id, timeout?: number) => {\n const [connectError, setConnectError] = useState<Error>()\n\n const {\n gateway, error, timedout,\n } = useGateway(gatewayName, timeout)\n\n const [accountPermissions, accountPermissionsError] = useAccountPermissions()\n\n const [address, setAddress] = useState<Address>()\n\n const connectSigner = useCallback(async () => {\n try {\n setConnectError(undefined)\n const assertedGateway = assertEx(gateway, () => `Gateway ${gatewayName} is not available`)\n const signer = assertedGateway.signerInstance\n const address = await signer.address()\n setAddress(address)\n return address\n } catch (e) {\n setConnectError(e as Error)\n }\n }, [gateway, gatewayName])\n\n return {\n address: asAddress(accountPermissions?.[0] ?? address), connectSigner, error: error ?? accountPermissionsError ?? connectError, gateway, timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/sdk-js'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null) => {\n return usePromise(async () => {\n if (isDefinedNotNull(viewer) && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { SimpleXyoNetwork } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new SimpleXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport {\n SimpleXyoSigner, type XyoConnection, type XyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new SimpleXyoSigner(account) : undefined, [account])\n}\n","import {\n delay, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/xl1-network-model'\nimport {\n HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })\n const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)\n const viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport {\n HttpRpcTransport, JsonRpcNetworkStakeViewer, JsonRpcXyoViewer, NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string): XyoViewer | undefined => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })\n return new JsonRpcXyoViewer(transport, { networkStakeViewer: new JsonRpcNetworkStakeViewer(transport) })\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isDefinedNotNull, isNull,\n} from '@xylabs/sdk-js'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useGateway } from '../client/index.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (\n networkId?: GatewayName,\n timeout?: number,\n) => {\n const {\n gateway, error, isLoading, timedout,\n } = useGateway(networkId, timeout)\n\n const result = usePromise(async () => {\n if (isDefinedNotNull(error)) return null\n if (isLoading) return\n if (timedout && isNull(gateway)) return null\n if (isDefined(gateway) && isDefined(networkId)) {\n const connection = await gateway?.connection()\n return connection?.viewer\n }\n }, [gateway, networkId, timeout])\n\n return result\n}\n"],"mappings":"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","names":["Stack","Tooltip","Typography","EthAddressWrapper","BlockiesAvatarAddress","React","ConnectedAccount","address","shortenedAddress","EthAddressWrapper","fromString","toShortString","Stack","direction","alignItems","spacing","BlockiesAvatarAddress","size","Tooltip","title","Typography","color","variant","fontFamily","Alert","AlertTitle","Button","Stack","Typography","ButtonEx","isDefined","isUndefined","ErrorRender","React","useEffect","hexToBigInt","formatAccountBalanceHistory","address","history","results","item","blockBw","txBw","transfer","from","to","amount","Object","entries","transfers","push","hexToBigInt","blockNumber","block","timestamp","$epoch","key","globalThis","crypto","randomUUID","txHash","_hash","debug","type","usePromise","isUndefined","hexToBigInt","isHex","toHex","balanceForRange","address","results","totalReceivedBalance","reduce","a","_block","_tx","transfer","hexToBigInt","transfers","toHex","totalSentBalance","from","Object","values","v","isHex","findMinimumBlock","history","length","blockNumbers","map","blockBw","block","min","Math","max","useAccountBalanceHistory","address","viewer","maxPage","blockRange","refresh","usePromise","isUndefined","page","lastBlock","pagedHistory","resolvedStartBlock","history","accountBalanceHistory","length","push","findMinimumBlock","nextHistory","formattedHistory","formatAccountBalanceHistory","balance","balanceForRange","truncated","isNull","useCallback","useEffect","useSyncExternalStore","isUndefined","CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","timeout","onTimeout","resolved","listener","addEventListener","setTimeout","removeEventListener","getXyoClient","isUndefined","client","Promise","resolve","assertEx","delay","forget","isDefined","isNull","TransactionConfirmationStatus","_params","active","params","exp","assertEx","transaction","nbf","onStatusUpdate","txHash","viewer","create","start","currentBlockNumber","isDefined","checkBlock","delay","error","stop","forget","Error","confirmed","blockNumber","progress","remainingBlocks","checkConfirmation","Math","round","tx","transactionByHash","isNull","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClient","subscribeWithTimeout","useCallback","clientState","useSyncExternalStore","useEffect","globalThis","xyo","isNull","addEventListener","removeEventListener","usePermissions","client","isLoading","error","timedout","useClient","permissions","usePromise","isArray","isDefined","isDefinedNotNull","isString","isDefined","findCaveat","permissions","targetCapability","targetCaveatType","existingPermissions","getPermissions","isDefined","length","foundPermissions","find","p","parentCapability","caveats","caveat","type","value","validateRestrictedAccounts","restrictedAccounts","isDefined","isArray","every","isString","Error","JSON","stringify","useAccountPermissions","permissions","error","usePermissions","usePromise","isDefinedNotNull","findCaveat","isDefined","isNull","useGateway","gatewayName","timeout","client","isLoading","error","timedout","useClient","resolveGateway","isNull","isDefined","gateways","gateway","undefined","usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useRef","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","balancePromiseRef","useRef","usePromise","isUndefined","undefined","currentPromise","accountBalance","current","result","err","console","error","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","usePromise","forget","isDefined","isHash","PayloadBuilder","useEffect","useState","useConfirmTransactionBase","transaction","onBroadcast","onStatusUpdate","runner","viewer","status","setStatus","useState","onStatusUpdateLocal","newStatus","transactionConfirmationStatus","transactionConfirmationError","usePromise","hasRunner","isDefined","hash","broadcastTransaction","PayloadBuilder","isHash","params","txHash","instance","TransactionConfirmationStatus","create","start","Error","useEffect","forget","stop","asAddress","assertEx","MainNetwork","useCallback","useState","useConnectAccount","gatewayName","MainNetwork","id","timeout","connectError","setConnectError","useState","gateway","error","timedout","useGateway","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","connectSigner","useCallback","undefined","assertedGateway","assertEx","signer","signerInstance","e","asAddress","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","SimpleXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","SimpleXyoNetwork","SimpleXyoSigner","useMemo","useSigner","_provider","account","useMemo","SimpleXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","useEffect","useMemo","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","networkStakeViewer","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcNetworkStakeViewer","JsonRpcXyoViewer","NetworkStakeViewerRpcSchemas","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","NetworkStakeViewerRpcSchemas","JsonRpcXyoViewer","networkStakeViewer","JsonRpcNetworkStakeViewer","usePromise","isDefined","isDefinedNotNull","isNull","useViewerFromWallet","networkId","timeout","gateway","error","isLoading","timedout","useGateway","result","usePromise","isDefinedNotNull","isNull","isDefined","connection","viewer","DefaultConnectComponent","props","React","ButtonEx","variant","size","DefaultNoWalletInstalledComponent","Alert","severity","AlertTitle","Typography","gutterBottom","Button","sx","display","justifySelf","href","target","rel","ConnectAccountsStack","AccountComponent","ConnectedAccount","ConnectComponent","NoWalletInstalledComponent","onAccountConnected","onCancel","timeout","address","connectSigner","error","timedout","useConnectAccount","undefined","useEffect","isDefined","Stack","direction","alignItems","spacing","isUndefined","onClick","ErrorRender","scope"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/connected/account/Connected.tsx","../../src/components/connected/ConnectAccountsStack.tsx","../../src/hooks/account/helpers/formatAccountBalanceHistory.ts","../../src/hooks/account/useAccountBalanceHistory.ts","../../src/lib/balanceForRange.ts","../../src/lib/findMinimumBlock.ts","../../src/hooks/client/useClient.ts","../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/helpers/transaction/Confirmation.ts","../../src/hooks/client/permissions/usePermissions.ts","../../src/hooks/client/permissions/usePermissionsAccounts.ts","../../src/hooks/client/helpers/findCaveat.ts","../../src/hooks/client/useGateway.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConfirmTransactionBase.ts","../../src/hooks/useConnectAccount.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts"],"sourcesContent":["import {\n Stack, Tooltip, Typography,\n} from '@mui/material'\nimport { EthAddressWrapper } from '@xylabs/sdk-js'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport const ConnectedAccount: React.FC<{ address: string }> = ({ address }) => {\n const shortenedAddress = `${EthAddressWrapper.fromString(address)?.toShortString(4)}`\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <BlockiesAvatarAddress address={address} size={21} />\n <Tooltip title={address}>\n <Typography color=\"textSecondary\" variant=\"caption\" fontFamily=\"monospace\">{shortenedAddress}</Typography>\n </Tooltip>\n </Stack>\n )\n}\n","import type { StackProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button, Stack,\n Typography,\n} from '@mui/material'\nimport type { ButtonExProps } from '@xylabs/react-button'\nimport { ButtonEx } from '@xylabs/react-button'\nimport type { Address } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { ComponentType, MouseEventHandler } from 'react'\nimport React, { useEffect } from 'react'\n\nimport { useConnectAccount } from '../../hooks/index.ts'\nimport { ConnectedAccount } from './account/index.ts'\n\nconst DefaultConnectComponent: React.FC<ButtonExProps> = props => (\n <ButtonEx variant=\"contained\" size=\"small\" {...props} />\n)\n\nconst DefaultNoWalletInstalledComponent: React.FC = () => (\n <Alert severity=\"warning\">\n <AlertTitle>XL1 Wallet Not Found</AlertTitle>\n <Typography gutterBottom>\n Please ensure that your XL1 Wallet is installed to connect your account.\n </Typography>\n <Button\n sx={{ display: 'flex', justifySelf: 'end' }}\n size=\"small\"\n variant=\"outlined\"\n href=\"https://chromewebstore.google.com/detail/xl1-wallet/fblbagcjeigmhakkfgjpdlcapcgmcfbm\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n Get XL1 Wallet\n </Button>\n </Alert>\n)\n\nexport interface ConnectClientAccountsStackProps extends StackProps {\n AccountComponent?: ComponentType<{ account?: string }>\n ConnectComponent?: ComponentType<{ onClick?: MouseEventHandler<HTMLElement> }>\n NoWalletInstalledComponent?: ComponentType\n onAccountConnected?: (account: Address) => void\n onCancel?: () => void\n timeout?: number\n}\n\nexport const ConnectAccountsStack: React.FC<ConnectClientAccountsStackProps> = ({\n AccountComponent = ConnectedAccount,\n ConnectComponent = DefaultConnectComponent,\n NoWalletInstalledComponent = DefaultNoWalletInstalledComponent,\n onAccountConnected,\n onCancel,\n timeout,\n ...props\n}) => {\n const {\n address, connectSigner, error, timedout,\n } = useConnectAccount(undefined, timeout)\n\n useEffect(() => {\n if (isDefined(error) && isDefined(onCancel)) {\n onCancel()\n }\n }, [error, onCancel])\n\n useEffect(() => {\n if (isDefined(address) && isDefined(onAccountConnected)) {\n onAccountConnected(address)\n }\n }, [address, onAccountConnected])\n\n return (\n <Stack direction=\"row\" alignItems=\"start\" spacing={2} {...props}>\n {isDefined(address)\n ? <AccountComponent address={address} />\n : null}\n {isUndefined(address) && !timedout\n ? (\n <ConnectComponent onClick={() => void connectSigner()}>Connect</ConnectComponent>\n )\n : null}\n {isUndefined(address) && timedout\n ? (\n <NoWalletInstalledComponent />\n )\n : null}\n <ErrorRender error={error} scope=\"ConnectSigner:error\" />\n </Stack>\n )\n}\n","import type { Address, Hex } from '@xylabs/sdk-js'\nimport { hexToBigInt } from '@xylabs/sdk-js'\nimport type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { AccountBalanceHistoryItemFormatted } from '../BalanceHistoryItemFormatted.ts'\n\nexport const formatAccountBalanceHistory = (address: Address, history: AccountBalanceHistoryItem[]): AccountBalanceHistoryItemFormatted[] => {\n let results: AccountBalanceHistoryItemFormatted[] = []\n for (const item of history) {\n const [blockBw, txBw, transfer] = item\n if (address === transfer.from) {\n for (const [to, amount] of Object.entries(transfer.transfers)) {\n results.push({\n amount: hexToBigInt(amount as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n timestamp: blockBw.$epoch,\n key: globalThis.crypto.randomUUID(),\n to: to as Address,\n txHash: txBw?._hash,\n debug: item,\n type: 'send',\n })\n }\n } else {\n results.push({\n amount: hexToBigInt(transfer.transfers[address] as Hex),\n blockNumber: blockBw.block,\n from: transfer.from,\n key: globalThis.crypto.randomUUID(),\n timestamp: blockBw.$epoch,\n to: address,\n txHash: txBw?._hash,\n debug: item,\n type: 'receive',\n })\n }\n }\n return results\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n type Address,\n isUndefined,\n} from '@xylabs/sdk-js'\nimport type { XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { balanceForRange, findMinimumBlock } from '../../lib/index.ts'\nimport { formatAccountBalanceHistory } from './helpers/index.ts'\n\nexport const useAccountBalanceHistory = (address?: Address, viewer?: XyoViewer, maxPage = 10, blockRange?: XL1BlockRange, refresh?: number) => {\n return usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n // Pagination Values\n let page = 1\n let lastBlock: number\n const pagedHistory: AccountBalanceHistoryItem[] = []\n const resolvedStartBlock = blockRange ? blockRange[0] : 0\n\n // Fetch first page to get starting lastBlock\n // If blockRange is provided, use that for the first fetch, otherwise the api will use [0, currentBlock]\n const history = await viewer.accountBalanceHistory(address, blockRange ? { range: blockRange } : {})\n if (history.length > 0) {\n pagedHistory.push(...history)\n // Set lastBlock to one less than the lowest block in the first page\n lastBlock = findMinimumBlock(history)\n while (page < maxPage) {\n // Fetch next page\n const nextHistory = await viewer.accountBalanceHistory(address, { range: [resolvedStartBlock, lastBlock] as XL1BlockRange })\n // Break if no more history\n if (nextHistory.length === 0) break\n // Update lastBlock and append to pagedHistory\n lastBlock = findMinimumBlock(nextHistory)\n pagedHistory.push(...nextHistory)\n // Increment page\n // Even if we are going to go over and break the loop, we still want to increment to show the answer was truncated\n page++\n }\n }\n const formattedHistory = formatAccountBalanceHistory(address, pagedHistory)\n\n return {\n history: formattedHistory,\n balance: balanceForRange(address, pagedHistory),\n truncated: page >= maxPage,\n }\n }, [address, viewer, refresh, blockRange, maxPage])\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport {\n hexToBigInt, isHex, toHex,\n} from '@xylabs/sdk-js'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const balanceForRange = (address: Address, results: AccountBalanceHistoryItem[]): [AttoXL1, AttoXL1] => {\n const totalReceivedBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return a + hexToBigInt(transfer.transfers[address] ?? toHex(0))\n }, 0n)\n // eslint-disable-next-line unicorn/no-array-reduce\n const totalSentBalance = results?.reduce((a, [_block, _tx, transfer]) => {\n return (transfer.from === address) ? a + Object.values(transfer.transfers).reduce((a, v) => a + (isHex(v) ? hexToBigInt(v) : 0n), 0n) : a\n }, 0n)\n return [totalReceivedBalance, totalSentBalance] as [AttoXL1, AttoXL1]\n}\n","import type { AccountBalanceHistoryItem } from '@xyo-network/xl1-protocol-sdk'\n\nexport const findMinimumBlock = (history: AccountBalanceHistoryItem[]): number => {\n // since taking Math.min of an empty array returns Infinity\n if (history.length === 0) return 0\n const blockNumbers = history.map(([blockBw]) => blockBw.block)\n const min = Math.min(...blockNumbers)\n return Math.max(min - 1, 0)\n}\n","import { isNull } from '@xylabs/sdk-js'\nimport type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useCallback, useEffect, useSyncExternalStore,\n} from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n timedout: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n timedout: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async (timeout?: number) => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient(timeout)\n if (client === null) {\n updateState({ timedout: true, isLoading: false })\n return\n }\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n console.error('Error initializing XyoClient', error)\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void, timeout?: number) => {\n listeners.add(listener)\n\n void initializeClient(timeout)\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = (timeout?: number) => {\n const subscribeWithTimeout = useCallback((listener: () => void) => subscribe(listener, timeout), [timeout])\n const clientState = useSyncExternalStore(subscribeWithTimeout, getSnapshot)\n\n useEffect(() => {\n // if client appears after timeout\n let listener = () => {\n // Update state when client becomes available\n updateState({\n client: globalThis.xyo?.client,\n isLoading: false,\n error: null,\n })\n // Notify listeners of the change\n emitChange()\n }\n // If we have timed out and still no client, listen for the plugin-ready event\n if (clientState.timedout && isNull(clientState.client) && !clientState.isLoading) {\n globalThis.addEventListener('xyo:plugin-ready', listener)\n }\n\n return () => {\n globalThis.removeEventListener('xyo:plugin-ready', listener)\n }\n })\n\n return clientState\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { XyoClient } from '@xyo-network/xl1-protocol-sdk'\n\nconst CLIENT_LISTENER_TIMEOUT = 500\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, timeout: number, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n globalThis.removeEventListener('xyo:plugin-ready', listener)\n onTimeout()\n }\n }, timeout)\n}\n\ntype ReturnType = XyoClient | undefined | null\n\nexport async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT): Promise<ReturnType> {\n // if no xyo object, we can bail early\n if (isUndefined(globalThis.xyo)) {\n return null\n }\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<ReturnType>((resolve) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n timeout,\n () => {\n resolve(null)\n },\n )\n })\n}\n","import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport {\n assertEx, delay, forget, isDefined, isNull,\n} from '@xylabs/sdk-js'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport type ConfirmationStatusUpdate = {\n blockNumber: number\n confirmed: boolean\n error?: Error\n progress?: number\n remainingBlocks?: number\n}\n\nexport type TransactionConfirmationParams = {\n onStatusUpdate?: (status: ConfirmationStatusUpdate) => void\n transaction: SignedHydratedTransaction\n txHash: Hash\n viewer: XyoViewer\n}\n\nexport class TransactionConfirmationStatus {\n private readonly _params: TransactionConfirmationParams\n private active = false\n\n constructor(params: TransactionConfirmationParams) {\n this._params = params\n }\n\n get exp(): number {\n return assertEx(this.transaction[0].exp, () => 'exp is not found, transaction is not set')\n }\n\n get nbf(): number {\n return assertEx(this.transaction[0].nbf, () => 'nbf is not found, transaction is not set')\n }\n\n get onStatusUpdate(): TransactionConfirmationParams['onStatusUpdate'] {\n return this._params.onStatusUpdate\n }\n\n get params(): TransactionConfirmationParams {\n return this._params\n }\n\n get transaction(): SignedHydratedTransaction {\n return this.params.transaction\n }\n\n get txHash(): Hash {\n return this.params.txHash\n }\n\n get viewer(): XyoViewer {\n return this.params.viewer\n }\n\n static create(params: TransactionConfirmationParams): Promisable<TransactionConfirmationStatus> {\n return new TransactionConfirmationStatus(params)\n }\n\n async start(): Promise<void> {\n this.active = true\n try {\n const currentBlockNumber = await this.viewer.currentBlockNumber()\n while (isDefined(currentBlockNumber) && this.active) {\n await this.checkBlock(currentBlockNumber)\n // check block every second to see if the transaction is confirmed\n await delay(1000)\n }\n } catch (error) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: error instanceof Error ? error : new Error('Unknown error occurred'),\n confirmed: false,\n blockNumber: 0,\n progress: 0,\n remainingBlocks: 0,\n }))\n }\n }\n\n stop(): Promisable<void> {\n this.active = false\n }\n\n private async checkBlock(blockNumber: number): Promise<void> {\n if (blockNumber < this.nbf) {\n await this.stop()\n forget(this.onStatusUpdate?.({\n error: new Error(`Block number: ${blockNumber} is before ${this.nbf}`),\n confirmed: false,\n blockNumber,\n progress: 0,\n remainingBlocks: this.exp - blockNumber,\n }))\n }\n if (blockNumber > this.exp) {\n forget(this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress: 100, remainingBlocks: 0,\n }))\n return\n }\n if (blockNumber < this.exp) {\n await this.checkConfirmation(blockNumber)\n }\n }\n\n private async checkConfirmation(blockNumber: number): Promise<void> {\n const remainingBlocks = this.exp - blockNumber\n const progress = Math.round(((blockNumber - this.nbf) / (this.exp - this.nbf)) * 100)\n\n const tx = await this.viewer.transactionByHash?.(this.txHash)\n if (isNull(tx)) {\n this.onStatusUpdate?.({\n confirmed: false, blockNumber, progress, remainingBlocks,\n })\n } else {\n this.onStatusUpdate?.({\n confirmed: true, blockNumber, progress, remainingBlocks,\n })\n await this.stop()\n }\n }\n}\n","import { useClient } from '../useClient.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClient()\n const permissions = client?.permissions\n return {\n permissions,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { JsonValue } from '@xylabs/sdk-js'\nimport {\n isArray, isDefined, isDefinedNotNull, isString,\n} from '@xylabs/sdk-js'\n\nimport { findCaveat } from '../helpers/index.ts'\nimport { usePermissions } from './usePermissions.ts'\n\nconst validateRestrictedAccounts = (restrictedAccounts: JsonValue): readonly string [] => {\n if (isDefined(restrictedAccounts)) {\n if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {\n return restrictedAccounts\n }\n throw new Error(\n `Unrecognized format for restrictReturnedAccounts caveat found on permissions. \\n\n Should be an array of strings: ${JSON.stringify(restrictedAccounts)}`,\n )\n }\n return []\n}\n\nexport const useAccountPermissions = () => {\n const { permissions, error } = usePermissions()\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) throw error\n if (isDefined(permissions)) {\n const restrictedAccounts = await findCaveat(\n permissions,\n // TODO - extract to constant in protocol package\n 'xyoWallet_getAccounts',\n 'restrictReturnedAccounts',\n )\n return validateRestrictedAccounts(restrictedAccounts)\n }\n }, [permissions])\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type {\n CaveatTypes, ParentCapability, XyoPermissions,\n} from '@xyo-network/xl1-protocol-sdk'\n\nexport const findCaveat = async (\n permissions: XyoPermissions,\n targetCapability: ParentCapability,\n targetCaveatType: CaveatTypes,\n) => {\n const existingPermissions = await permissions.getPermissions()\n if (isDefined(existingPermissions) && existingPermissions.length > 0) {\n const foundPermissions = existingPermissions\n .find(p => p.parentCapability === targetCapability)\n if (isDefined(foundPermissions)) {\n return foundPermissions.caveats?.find(caveat => caveat.type === targetCaveatType)?.value ?? []\n }\n }\n return existingPermissions\n}\n","import { isDefined, isNull } from '@xylabs/sdk-js'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName, timeout?: number) => {\n const {\n client, isLoading, error, timedout,\n } = useClient(timeout)\n\n const resolveGateway = () => {\n // null client means we do not have to wait for timedout\n if (isNull(client)) return null\n if (timedout && !isLoading && isDefined(gatewayName)) {\n return null\n }\n return client?.gateways?.[gatewayName!]\n }\n\n return {\n gateway: gatewayName ? resolveGateway() : undefined,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { Address } from '@xylabs/sdk-js'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/sdk-js'\nimport type { AttoXL1 } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport {\n useMemo, useRef, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n const balancePromiseRef = useRef<Promise<AttoXL1> | null>(null)\n usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n\n setLoading(true)\n setBalancesError(undefined)\n\n // Create and store the current promise\n const currentPromise = viewer.accountBalance(address) as Promise<AttoXL1>\n balancePromiseRef.current = currentPromise\n\n try {\n const result = await currentPromise\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n } catch (err) {\n // Only update state if this is still the latest promise\n if (balancePromiseRef.current === currentPromise) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err as Error)\n setLoading(false)\n }\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { Hash } from '@xylabs/sdk-js'\nimport {\n forget, isDefined, isHash,\n} from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport type { XyoRunner, XyoViewer } from '@xyo-network/xl1-protocol-sdk'\nimport { useEffect, useState } from 'react'\n\nimport type { ConfirmationStatusUpdate, TransactionConfirmationParams } from './helpers/index.ts'\nimport { TransactionConfirmationStatus } from './helpers/index.ts'\n\nexport const useConfirmTransactionBase = (\n // The transaction to confirm\n transaction?: SignedHydratedTransaction,\n // Callback for when the transaction is broadcast to the network\n onBroadcast?: (hash: Hash) => void,\n // Optional callback for status updates during confirmation\n onStatusUpdate?: TransactionConfirmationParams['onStatusUpdate'],\n // Runner to use for broadcasting transactions\n runner?: XyoRunner,\n // Viewer to use for checking transaction status\n viewer?: XyoViewer,\n) => {\n const [status, setStatus] = useState<ConfirmationStatusUpdate>()\n const onStatusUpdateLocal = (newStatus: ConfirmationStatusUpdate) => {\n setStatus(newStatus)\n onStatusUpdate?.(newStatus)\n }\n\n const [transactionConfirmationStatus, transactionConfirmationError] = usePromise(async () => {\n const hasRunner = isDefined(runner)\n if (transaction && viewer) {\n const hash = hasRunner ? (await runner.broadcastTransaction(transaction)) : await PayloadBuilder.hash(transaction[0])\n if (isHash(hash)) {\n if (hasRunner && isDefined(onBroadcast)) onBroadcast(hash)\n const params: TransactionConfirmationParams = {\n onStatusUpdate: onStatusUpdateLocal,\n transaction,\n txHash: hash,\n viewer,\n }\n const instance = await TransactionConfirmationStatus.create(params)\n await instance.start()\n return instance\n } else {\n throw new Error('unexpected return type from broadcast transaction')\n }\n }\n }, [transaction, runner, viewer])\n\n useEffect(() => {\n return () => {\n if (transactionConfirmationStatus) {\n // Stop the transaction confirmation status instance when the component unmounts\n forget(transactionConfirmationStatus.stop())\n }\n }\n }, [transactionConfirmationStatus])\n\n return { status, transactionConfirmationError }\n}\n","import { type Address, asAddress } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MainNetwork } from '@xyo-network/xl1-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGateway } from './client/index.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id, timeout?: number) => {\n const [connectError, setConnectError] = useState<Error>()\n\n const {\n gateway, error, timedout,\n } = useGateway(gatewayName, timeout)\n\n const [accountPermissions, accountPermissionsError] = useAccountPermissions()\n\n const [address, setAddress] = useState<Address>()\n\n const connectSigner = useCallback(async () => {\n try {\n setConnectError(undefined)\n const assertedGateway = assertEx(gateway, () => `Gateway ${gatewayName} is not available`)\n const signer = assertedGateway.signerInstance\n const address = await signer.address()\n setAddress(address)\n return address\n } catch (e) {\n setConnectError(e as Error)\n }\n }, [gateway, gatewayName])\n\n return {\n address: asAddress(accountPermissions?.[0] ?? address), connectSigner, error: error ?? accountPermissionsError ?? connectError, gateway, timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/sdk-js'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null) => {\n return usePromise(async () => {\n if (isDefinedNotNull(viewer) && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { XyoRunnerMoniker } from '@xyo-network/xl1-protocol-sdk'\nimport { buildJsonRpcProviderLocator } from '@xyo-network/xl1-providers'\nimport type {\n JsonRpcXyoRunner, RpcSchemaMap, TransportFactory,\n} from '@xyo-network/xl1-rpc'\nimport { HttpRpcTransport } from '@xyo-network/xl1-rpc'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return usePromise(async () => {\n if (isUndefined(url)) {\n return\n }\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(`${url}/rpc`, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n return await locator.getInstance<JsonRpcXyoRunner>(XyoRunnerMoniker)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { SimpleXyoNetwork } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new SimpleXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport {\n SimpleXyoSigner, type XyoConnection, type XyoSigner,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new SimpleXyoSigner(account) : undefined, [account])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n delay, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/xl1-network-model'\nimport { XyoViewerMoniker } from '@xyo-network/xl1-protocol-sdk'\nimport { buildJsonRpcProviderLocator } from '@xyo-network/xl1-providers'\nimport type {\n JsonRpcXyoViewer, RpcSchemaMap, TransportFactory,\n} from '@xyo-network/xl1-rpc'\nimport { HttpRpcTransport } from '@xyo-network/xl1-rpc'\nimport { useEffect, useState } from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const [viewer] = usePromise(async () => {\n if (isUndefined(endpoint)) return\n\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(endpoint, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n const viewer = await locator.getInstance<JsonRpcXyoViewer>(XyoViewerMoniker)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { type XyoViewer, XyoViewerMoniker } from '@xyo-network/xl1-protocol-sdk'\nimport { buildJsonRpcProviderLocator } from '@xyo-network/xl1-providers'\nimport type {\n JsonRpcXyoViewer, RpcSchemaMap, TransportFactory,\n} from '@xyo-network/xl1-rpc'\nimport { HttpRpcTransport } from '@xyo-network/xl1-rpc'\n\nexport const useHttpRpcViewer = (url?: string): XyoViewer | undefined => {\n const [resolvedViewer] = usePromise(async () => {\n if (isUndefined(url)) {\n return\n }\n const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(`${url}/rpc`, schemas)\n const locator = await buildJsonRpcProviderLocator({ transportFactory })\n return await locator.getInstance<JsonRpcXyoViewer>(XyoViewerMoniker)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isDefinedNotNull, isNull,\n} from '@xylabs/sdk-js'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useGateway } from '../client/index.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (\n networkId?: GatewayName,\n timeout?: number,\n) => {\n const {\n gateway, error, isLoading, timedout,\n } = useGateway(networkId, timeout)\n\n const result = usePromise(async () => {\n if (isDefinedNotNull(error)) return null\n if (isLoading) return\n if (timedout && isNull(gateway)) return null\n if (isDefined(gateway) && isDefined(networkId)) {\n const connection = await gateway?.connection()\n return connection?.viewer\n }\n }, [gateway, networkId, timeout])\n\n return result\n}\n"],"mappings":"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","names":["Stack","Tooltip","Typography","EthAddressWrapper","BlockiesAvatarAddress","React","ConnectedAccount","address","shortenedAddress","EthAddressWrapper","fromString","toShortString","Stack","direction","alignItems","spacing","BlockiesAvatarAddress","size","Tooltip","title","Typography","color","variant","fontFamily","Alert","AlertTitle","Button","Stack","Typography","ButtonEx","isDefined","isUndefined","ErrorRender","React","useEffect","hexToBigInt","formatAccountBalanceHistory","address","history","results","item","blockBw","txBw","transfer","from","to","amount","Object","entries","transfers","push","hexToBigInt","blockNumber","block","timestamp","$epoch","key","globalThis","crypto","randomUUID","txHash","_hash","debug","type","usePromise","isUndefined","hexToBigInt","isHex","toHex","balanceForRange","address","results","totalReceivedBalance","reduce","a","_block","_tx","transfer","hexToBigInt","transfers","toHex","totalSentBalance","from","Object","values","v","isHex","findMinimumBlock","history","length","blockNumbers","map","blockBw","block","min","Math","max","useAccountBalanceHistory","address","viewer","maxPage","blockRange","refresh","usePromise","isUndefined","page","lastBlock","pagedHistory","resolvedStartBlock","history","accountBalanceHistory","range","length","push","findMinimumBlock","nextHistory","formattedHistory","formatAccountBalanceHistory","balance","balanceForRange","truncated","isNull","useCallback","useEffect","useSyncExternalStore","isUndefined","CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","timeout","onTimeout","resolved","listener","addEventListener","setTimeout","removeEventListener","getXyoClient","isUndefined","client","Promise","resolve","assertEx","delay","forget","isDefined","isNull","TransactionConfirmationStatus","_params","active","params","exp","assertEx","transaction","nbf","onStatusUpdate","txHash","viewer","create","start","currentBlockNumber","isDefined","checkBlock","delay","error","stop","forget","Error","confirmed","blockNumber","progress","remainingBlocks","checkConfirmation","Math","round","tx","transactionByHash","isNull","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClient","subscribeWithTimeout","useCallback","clientState","useSyncExternalStore","useEffect","globalThis","xyo","isNull","addEventListener","removeEventListener","usePermissions","client","isLoading","error","timedout","useClient","permissions","usePromise","isArray","isDefined","isDefinedNotNull","isString","isDefined","findCaveat","permissions","targetCapability","targetCaveatType","existingPermissions","getPermissions","isDefined","length","foundPermissions","find","p","parentCapability","caveats","caveat","type","value","validateRestrictedAccounts","restrictedAccounts","isDefined","isArray","every","isString","Error","JSON","stringify","useAccountPermissions","permissions","error","usePermissions","usePromise","isDefinedNotNull","findCaveat","isDefined","isNull","useGateway","gatewayName","timeout","client","isLoading","error","timedout","useClient","resolveGateway","isNull","isDefined","gateways","gateway","undefined","usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useRef","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","balancePromiseRef","useRef","usePromise","isUndefined","undefined","currentPromise","accountBalance","current","result","err","console","error","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","usePromise","forget","isDefined","isHash","PayloadBuilder","useEffect","useState","useConfirmTransactionBase","transaction","onBroadcast","onStatusUpdate","runner","viewer","status","setStatus","useState","onStatusUpdateLocal","newStatus","transactionConfirmationStatus","transactionConfirmationError","usePromise","hasRunner","isDefined","hash","broadcastTransaction","PayloadBuilder","isHash","params","txHash","instance","TransactionConfirmationStatus","create","start","Error","useEffect","forget","stop","asAddress","assertEx","MainNetwork","useCallback","useState","useConnectAccount","gatewayName","MainNetwork","id","timeout","connectError","setConnectError","useState","gateway","error","timedout","useGateway","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","connectSigner","useCallback","undefined","assertedGateway","assertEx","signer","signerInstance","e","asAddress","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","usePromise","isUndefined","XyoRunnerMoniker","buildJsonRpcProviderLocator","HttpRpcTransport","useHttpRpcRunner","url","usePromise","isUndefined","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","getInstance","XyoRunnerMoniker","isUndefined","SimpleXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","SimpleXyoNetwork","SimpleXyoSigner","useMemo","useSigner","_provider","account","useMemo","SimpleXyoSigner","undefined","usePromise","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","XyoViewerMoniker","buildJsonRpcProviderLocator","HttpRpcTransport","useEffect","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","usePromise","isUndefined","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","getInstance","XyoViewerMoniker","useEffect","undefined","block","currentBlock","isDefined","err","delay","usePromise","isUndefined","XyoViewerMoniker","buildJsonRpcProviderLocator","HttpRpcTransport","useHttpRpcViewer","url","resolvedViewer","usePromise","isUndefined","transportFactory","schemas","HttpRpcTransport","locator","buildJsonRpcProviderLocator","getInstance","XyoViewerMoniker","usePromise","isDefined","isDefinedNotNull","isNull","useViewerFromWallet","networkId","timeout","gateway","error","isLoading","timedout","useGateway","result","usePromise","isDefinedNotNull","isNull","isDefined","connection","viewer","DefaultConnectComponent","props","React","ButtonEx","variant","size","DefaultNoWalletInstalledComponent","Alert","severity","AlertTitle","Typography","gutterBottom","Button","sx","display","justifySelf","href","target","rel","ConnectAccountsStack","AccountComponent","ConnectedAccount","ConnectComponent","NoWalletInstalledComponent","onAccountConnected","onCancel","timeout","address","connectSigner","error","timedout","useConnectAccount","undefined","useEffect","isDefined","Stack","direction","alignItems","spacing","isUndefined","onClick","ErrorRender","scope"]}
|
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-provider",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.18.0",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -49,27 +49,28 @@
|
|
|
49
49
|
"@xylabs/sdk-js": "~5.0.51",
|
|
50
50
|
"@xyo-network/account-model": "~5.2.17",
|
|
51
51
|
"@xyo-network/payload-builder": "~5.2.17",
|
|
52
|
-
"@xyo-network/react-chain-blockies": "~1.
|
|
52
|
+
"@xyo-network/react-chain-blockies": "~1.18.0",
|
|
53
53
|
"@xyo-network/react-error": "~7.4.2",
|
|
54
|
-
"@xyo-network/xl1-network-model": "~1.
|
|
54
|
+
"@xyo-network/xl1-network-model": "~1.18.0",
|
|
55
55
|
"@xyo-network/xl1-protocol": "~1.14.17",
|
|
56
|
-
"@xyo-network/xl1-protocol-sdk": "~1.
|
|
57
|
-
"@xyo-network/xl1-
|
|
56
|
+
"@xyo-network/xl1-protocol-sdk": "~1.18.0",
|
|
57
|
+
"@xyo-network/xl1-providers": "~1.18.0",
|
|
58
|
+
"@xyo-network/xl1-rpc": "~1.18.0"
|
|
58
59
|
},
|
|
59
60
|
"devDependencies": {
|
|
60
61
|
"@emotion/react": "~11.14.0",
|
|
61
62
|
"@emotion/styled": "~11.14.1",
|
|
62
63
|
"@mui/material": "~7.3.6",
|
|
63
|
-
"@storybook/react-vite": "~10.1.
|
|
64
|
+
"@storybook/react-vite": "~10.1.9",
|
|
64
65
|
"@types/react": "~19.2.7",
|
|
65
66
|
"@xylabs/react-button": "~7.1.9",
|
|
66
|
-
"@xylabs/ts-scripts-yarn3": "~7.2.
|
|
67
|
-
"@xylabs/tsconfig": "~7.2.
|
|
68
|
-
"@xylabs/tsconfig-dom": "~7.2.
|
|
69
|
-
"@xylabs/tsconfig-react": "~7.2.
|
|
70
|
-
"@xyo-network/react-chain-model": "~1.
|
|
67
|
+
"@xylabs/ts-scripts-yarn3": "~7.2.32",
|
|
68
|
+
"@xylabs/tsconfig": "~7.2.32",
|
|
69
|
+
"@xylabs/tsconfig-dom": "~7.2.32",
|
|
70
|
+
"@xylabs/tsconfig-react": "~7.2.32",
|
|
71
|
+
"@xyo-network/react-chain-model": "~1.18.0",
|
|
71
72
|
"@xyo-network/react-error": "~7.4.2",
|
|
72
|
-
"eslint": "^9.39.
|
|
73
|
+
"eslint": "^9.39.2",
|
|
73
74
|
"react": "~19.2.3",
|
|
74
75
|
"typescript": "~5.9.3"
|
|
75
76
|
},
|
|
@@ -21,14 +21,14 @@ export const useAccountBalanceHistory = (address?: Address, viewer?: XyoViewer,
|
|
|
21
21
|
|
|
22
22
|
// Fetch first page to get starting lastBlock
|
|
23
23
|
// If blockRange is provided, use that for the first fetch, otherwise the api will use [0, currentBlock]
|
|
24
|
-
const history = await viewer.accountBalanceHistory(address, blockRange)
|
|
24
|
+
const history = await viewer.accountBalanceHistory(address, blockRange ? { range: blockRange } : {})
|
|
25
25
|
if (history.length > 0) {
|
|
26
26
|
pagedHistory.push(...history)
|
|
27
27
|
// Set lastBlock to one less than the lowest block in the first page
|
|
28
28
|
lastBlock = findMinimumBlock(history)
|
|
29
29
|
while (page < maxPage) {
|
|
30
30
|
// Fetch next page
|
|
31
|
-
const nextHistory = await viewer.accountBalanceHistory(address, [resolvedStartBlock, lastBlock] as XL1BlockRange)
|
|
31
|
+
const nextHistory = await viewer.accountBalanceHistory(address, { range: [resolvedStartBlock, lastBlock] as XL1BlockRange })
|
|
32
32
|
// Break if no more history
|
|
33
33
|
if (nextHistory.length === 0) break
|
|
34
34
|
// Update lastBlock and append to pagedHistory
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
+
import { usePromise } from '@xylabs/react-promise'
|
|
1
2
|
import { isUndefined } from '@xylabs/sdk-js'
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { XyoRunnerMoniker } from '@xyo-network/xl1-protocol-sdk'
|
|
4
|
+
import { buildJsonRpcProviderLocator } from '@xyo-network/xl1-providers'
|
|
5
|
+
import type {
|
|
6
|
+
JsonRpcXyoRunner, RpcSchemaMap, TransportFactory,
|
|
5
7
|
} from '@xyo-network/xl1-rpc'
|
|
6
|
-
import {
|
|
8
|
+
import { HttpRpcTransport } from '@xyo-network/xl1-rpc'
|
|
7
9
|
|
|
8
10
|
export const useHttpRpcRunner = (url?: string) => {
|
|
9
|
-
return
|
|
11
|
+
return usePromise(async () => {
|
|
10
12
|
if (isUndefined(url)) {
|
|
11
13
|
return
|
|
12
14
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
+
const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(`${url}/rpc`, schemas)
|
|
16
|
+
const locator = await buildJsonRpcProviderLocator({ transportFactory })
|
|
17
|
+
return await locator.getInstance<JsonRpcXyoRunner>(XyoRunnerMoniker)
|
|
15
18
|
}, [url])
|
|
16
19
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import { usePromise } from '@xylabs/react-promise'
|
|
1
2
|
import {
|
|
2
3
|
delay, isDefined, isUndefined,
|
|
3
4
|
} from '@xylabs/sdk-js'
|
|
4
5
|
import { LocalNetwork, SequenceNetwork } from '@xyo-network/xl1-network-model'
|
|
5
|
-
import {
|
|
6
|
-
|
|
6
|
+
import { XyoViewerMoniker } from '@xyo-network/xl1-protocol-sdk'
|
|
7
|
+
import { buildJsonRpcProviderLocator } from '@xyo-network/xl1-providers'
|
|
8
|
+
import type {
|
|
9
|
+
JsonRpcXyoViewer, RpcSchemaMap, TransportFactory,
|
|
7
10
|
} from '@xyo-network/xl1-rpc'
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
} from 'react'
|
|
11
|
+
import { HttpRpcTransport } from '@xyo-network/xl1-rpc'
|
|
12
|
+
import { useEffect, useState } from 'react'
|
|
11
13
|
|
|
12
14
|
const INTERVAL = 5000 // 5 seconds
|
|
13
15
|
|
|
@@ -28,12 +30,12 @@ export const useCheckRpc = (endpoint?: string) => {
|
|
|
28
30
|
const [isLocalProducer, setIsLocalProducer] = useState(false)
|
|
29
31
|
const [error, setError] = useState<Error>()
|
|
30
32
|
|
|
31
|
-
const viewer =
|
|
33
|
+
const [viewer] = usePromise(async () => {
|
|
32
34
|
if (isUndefined(endpoint)) return
|
|
33
35
|
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const viewer =
|
|
36
|
+
const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(endpoint, schemas)
|
|
37
|
+
const locator = await buildJsonRpcProviderLocator({ transportFactory })
|
|
38
|
+
const viewer = await locator.getInstance<JsonRpcXyoViewer>(XyoViewerMoniker)
|
|
37
39
|
return viewer
|
|
38
40
|
}, [endpoint])
|
|
39
41
|
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
+
import { usePromise } from '@xylabs/react-promise'
|
|
1
2
|
import { isUndefined } from '@xylabs/sdk-js'
|
|
2
|
-
import type
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { type XyoViewer, XyoViewerMoniker } from '@xyo-network/xl1-protocol-sdk'
|
|
4
|
+
import { buildJsonRpcProviderLocator } from '@xyo-network/xl1-providers'
|
|
5
|
+
import type {
|
|
6
|
+
JsonRpcXyoViewer, RpcSchemaMap, TransportFactory,
|
|
5
7
|
} from '@xyo-network/xl1-rpc'
|
|
6
|
-
import {
|
|
8
|
+
import { HttpRpcTransport } from '@xyo-network/xl1-rpc'
|
|
7
9
|
|
|
8
10
|
export const useHttpRpcViewer = (url?: string): XyoViewer | undefined => {
|
|
9
|
-
const resolvedViewer =
|
|
11
|
+
const [resolvedViewer] = usePromise(async () => {
|
|
10
12
|
if (isUndefined(url)) {
|
|
11
13
|
return
|
|
12
14
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
+
const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(`${url}/rpc`, schemas)
|
|
16
|
+
const locator = await buildJsonRpcProviderLocator({ transportFactory })
|
|
17
|
+
return await locator.getInstance<JsonRpcXyoViewer>(XyoViewerMoniker)
|
|
15
18
|
}, [url])
|
|
16
19
|
|
|
17
20
|
return resolvedViewer
|