@xyo-network/react-chain-provider 1.20.5 → 1.20.9

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/gateway/Provider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAEN,MAAM,OAAO,CAAA;AAQd,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA6D1D,CAAA"}
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/gateway/Provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAAkB,MAAM,OAAO,CAAA;AAOtC,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAiE1D,CAAA"}
@@ -1,5 +1,5 @@
1
1
  export declare const usePermissions: () => {
2
- permissions: import("@xyo-network/xl1-protocol").XyoPermissions | undefined;
2
+ permissions: import("@xyo-network/xl1-protocol-lib").XyoPermissions | undefined;
3
3
  isLoading: boolean;
4
4
  error: Error | null;
5
5
  timedout: boolean;
@@ -1,2 +1,2 @@
1
- export declare const useNetworkFromGateway: () => import("@xyo-network/xl1-protocol").XyoNetwork | undefined;
1
+ export declare const useNetworkFromGateway: () => import("@xyo-network/xl1-protocol-lib").XyoNetwork | undefined;
2
2
  //# sourceMappingURL=useNetwork.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNetwork.d.ts","sourceRoot":"","sources":["../../../../src/hooks/gateway/useNetwork.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,kEAGjC,CAAA"}
1
+ {"version":3,"file":"useNetwork.d.ts","sourceRoot":"","sources":["../../../../src/hooks/gateway/useNetwork.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,sEAGjC,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const useRunnerFromGateway: () => import("@xyo-network/xl1-protocol").XyoRunner | undefined;
1
+ export declare const useRunnerFromGateway: () => import("@xyo-network/xl1-protocol-lib").XyoRunner | undefined;
2
2
  //# sourceMappingURL=useRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRunner.d.ts","sourceRoot":"","sources":["../../../../src/hooks/gateway/useRunner.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,iEAGhC,CAAA"}
1
+ {"version":3,"file":"useRunner.d.ts","sourceRoot":"","sources":["../../../../src/hooks/gateway/useRunner.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,qEAGhC,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const useViewerFromGateway: () => import("@xyo-network/xl1-protocol").XyoViewer | undefined;
1
+ export declare const useViewerFromGateway: () => import("@xyo-network/xl1-protocol-lib").XyoViewer | undefined;
2
2
  //# sourceMappingURL=useViewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useViewer.d.ts","sourceRoot":"","sources":["../../../../src/hooks/gateway/useViewer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,iEAGhC,CAAA"}
1
+ {"version":3,"file":"useViewer.d.ts","sourceRoot":"","sources":["../../../../src/hooks/gateway/useViewer.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,qEAGhC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { Address } from '@xylabs/sdk-js';
2
2
  import type { AttoXL1, XyoViewer } from '@xyo-network/xl1-sdk';
3
- export declare const useAddressBalance: (address?: Address, viewer?: XyoViewer, refresh?: number) => {
3
+ export declare const useAddressBalance: (address?: Address, viewer?: XyoViewer, refresh?: number, reset?: number) => {
4
4
  address: (Lowercase<string> & {
5
5
  readonly __hex: true;
6
6
  } & {
@@ -1 +1 @@
1
- {"version":3,"file":"useAddressBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAddressBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAM9D,eAAO,MAAM,iBAAiB,GAE5B,UAAU,OAAO,EAEjB,SAAS,SAAS,EAElB,UAAU,MAAM;;;;;;;;;;;CAkEjB,CAAA"}
1
+ {"version":3,"file":"useAddressBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAddressBalance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAM9D,eAAO,MAAM,iBAAiB,GAE5B,UAAU,OAAO,EAEjB,SAAS,SAAS,EAElB,UAAU,MAAM,EAEhB,QAAQ,MAAM;;;;;;;;;;;CAoEf,CAAA"}
@@ -29,7 +29,7 @@ import { Alert, AlertTitle, Button, Stack as Stack2, Typography as Typography2 }
29
29
  import { ButtonEx } from "@xylabs/react-button";
30
30
  import { isDefined as isDefined8, isUndefined as isUndefined6 } from "@xylabs/sdk-js";
31
31
  import { ErrorRender as ErrorRender2 } from "@xyo-network/react-error";
32
- import React5, { useEffect as useEffect7 } from "react";
32
+ import React5, { useEffect as useEffect6 } from "react";
33
33
 
34
34
  // src/hooks/account/helpers/formatAccountBalanceHistory.ts
35
35
  import { hexToBigInt } from "@xylabs/sdk-js";
@@ -554,7 +554,7 @@ var GatewayContext = createContextEx2();
554
554
  // src/contexts/gateway/Provider.tsx
555
555
  import { isDefinedNotNull as isDefinedNotNull3, isNull as isNull4 } from "@xylabs/sdk-js";
556
556
  import { ErrorRender } from "@xyo-network/react-error";
557
- import React4, { useEffect as useEffect4, useMemo as useMemo3, useState as useState3 } from "react";
557
+ import React4, { useMemo as useMemo3 } from "react";
558
558
 
559
559
  // src/contexts/in-page-gateways/context.ts
560
560
  import { createContextEx as createContextEx3 } from "@xylabs/react-shared";
@@ -632,29 +632,35 @@ var useProvidedInPageGateways = /* @__PURE__ */ __name((required = true) => useC
632
632
 
633
633
  // src/contexts/gateway/Provider.tsx
634
634
  var GatewayProvider = /* @__PURE__ */ __name(({ gatewayName, children }) => {
635
- const [defaultGateway, setDefaultGateway] = useState3();
636
- const [gateways, setGateways] = useState3({
637
- inPageGateway: void 0,
638
- walletGateway: void 0
639
- });
640
635
  const { gateway: gatewayFromWallet, error: gatewayFromWalletError } = useGatewayFromWallet(gatewayName);
641
636
  const { gateways: allGateways, errors: allGatewayErrors, clearAll } = useProvidedInPageGateways(true);
642
637
  const gatewayFromConfig = gatewayName ? allGateways[gatewayName] : void 0;
643
638
  const gatewayFromConfigError = gatewayName ? allGatewayErrors[gatewayName] : void 0;
644
- useEffect4(() => {
639
+ const { defaultGateway, gateways } = useMemo3(() => {
645
640
  if (isNull4(gatewayFromWallet)) {
646
- setDefaultGateway(gatewayFromConfig);
647
- setGateways({
648
- inPageGateway: gatewayFromConfig,
649
- walletGateway: null
650
- });
641
+ return {
642
+ defaultGateway: gatewayFromConfig,
643
+ gateways: {
644
+ inPageGateway: gatewayFromConfig,
645
+ walletGateway: null
646
+ }
647
+ };
651
648
  } else if (isDefinedNotNull3(gatewayFromWallet)) {
652
- setDefaultGateway(gatewayFromWallet);
653
- setGateways({
654
- inPageGateway: gatewayFromConfig,
655
- walletGateway: gatewayFromWallet
656
- });
649
+ return {
650
+ defaultGateway: gatewayFromWallet,
651
+ gateways: {
652
+ inPageGateway: gatewayFromConfig,
653
+ walletGateway: gatewayFromWallet
654
+ }
655
+ };
657
656
  }
657
+ return {
658
+ defaultGateway: void 0,
659
+ gateways: {
660
+ inPageGateway: void 0,
661
+ walletGateway: void 0
662
+ }
663
+ };
658
664
  }, [
659
665
  gatewayFromConfig,
660
666
  gatewayFromWallet
@@ -708,11 +714,18 @@ var useViewerFromGateway = /* @__PURE__ */ __name(() => {
708
714
  import { usePromise as usePromise3 } from "@xylabs/react-promise";
709
715
  import { isUndefined as isUndefined3, isUndefinedOrNull as isUndefinedOrNull2 } from "@xylabs/sdk-js";
710
716
  import { ShiftedBigInt } from "@xyo-network/xl1-sdk";
711
- import { useMemo as useMemo4, useRef, useState as useState4 } from "react";
712
- var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
713
- const [balancesResult, setBalancesResult] = useState4();
714
- const [loading, setLoading] = useState4(false);
715
- const [balancesError, setBalancesError] = useState4();
717
+ import { useMemo as useMemo4, useRef, useState as useState3 } from "react";
718
+ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh, reset) => {
719
+ const [balancesResult, setBalancesResult] = useState3();
720
+ const [loading, setLoading] = useState3(false);
721
+ const [balancesError, setBalancesError] = useState3();
722
+ const [previousReset, setPreviousReset] = useState3(reset);
723
+ if (reset !== previousReset) {
724
+ setPreviousReset(reset);
725
+ setBalancesResult(void 0);
726
+ setBalancesError(void 0);
727
+ setLoading(false);
728
+ }
716
729
  const balancePromiseRef = useRef(null);
717
730
  usePromise3(async () => {
718
731
  if (isUndefined3(viewer) || isUndefined3(address)) return;
@@ -739,13 +752,6 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
739
752
  viewer,
740
753
  refresh
741
754
  ]);
742
- useMemo4(() => {
743
- if (balancesError) {
744
- setLoading(false);
745
- }
746
- }, [
747
- balancesError
748
- ]);
749
755
  const shiftedBigInt = useMemo4(() => {
750
756
  if (typeof balancesResult !== "bigint") return;
751
757
  return new ShiftedBigInt(balancesResult, {
@@ -783,9 +789,9 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
783
789
  import { usePromise as usePromise4 } from "@xylabs/react-promise";
784
790
  import { forget as forget2, isDefined as isDefined6, isHash } from "@xylabs/sdk-js";
785
791
  import { PayloadBuilder } from "@xyo-network/sdk-js";
786
- import { useEffect as useEffect5, useState as useState5 } from "react";
792
+ import { useEffect as useEffect4, useState as useState4 } from "react";
787
793
  var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast, onStatusUpdate, runner, viewer) => {
788
- const [status, setStatus] = useState5();
794
+ const [status, setStatus] = useState4();
789
795
  const onStatusUpdateLocal = /* @__PURE__ */ __name((newStatus) => {
790
796
  setStatus(newStatus);
791
797
  onStatusUpdate?.(newStatus);
@@ -814,7 +820,7 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
814
820
  runner,
815
821
  viewer
816
822
  ]);
817
- useEffect5(() => {
823
+ useEffect4(() => {
818
824
  return () => {
819
825
  if (transactionConfirmationStatus) {
820
826
  forget2(transactionConfirmationStatus.stop());
@@ -833,12 +839,12 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
833
839
  import { asAddress } from "@xylabs/sdk-js";
834
840
  import { assertEx as assertEx3 } from "@xylabs/sdk-js";
835
841
  import { MainNetwork } from "@xyo-network/xl1-sdk";
836
- import { useCallback as useCallback3, useState as useState6 } from "react";
842
+ import { useCallback as useCallback3, useState as useState5 } from "react";
837
843
  var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id, timeout) => {
838
- const [connectError, setConnectError] = useState6();
844
+ const [connectError, setConnectError] = useState5();
839
845
  const { gateway, error, timedout } = useGatewayFromWallet(gatewayName, timeout);
840
846
  const [accountPermissions, accountPermissionsError] = useAccountPermissions();
841
- const [address, setAddress] = useState6();
847
+ const [address, setAddress] = useState5();
842
848
  const connectSigner = useCallback3(async () => {
843
849
  try {
844
850
  setConnectError(void 0);
@@ -920,7 +926,7 @@ import { usePromise as usePromise7 } from "@xylabs/react-promise";
920
926
  import { delay as delay2, isDefined as isDefined7, isUndefined as isUndefined5 } from "@xylabs/sdk-js";
921
927
  import { basicRemoteViewerLocator as basicRemoteViewerLocator2 } from "@xyo-network/chain-orchestration";
922
928
  import { LocalNetwork, SequenceNetwork, XyoViewerMoniker } from "@xyo-network/xl1-sdk";
923
- import { useEffect as useEffect6, useState as useState7 } from "react";
929
+ import { useEffect as useEffect5, useState as useState6 } from "react";
924
930
  var INTERVAL = 5e3;
925
931
  var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
926
932
  var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
@@ -933,8 +939,8 @@ var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
933
939
  return isSequenceRpc;
934
940
  }, "useCheckSequenceRpc");
935
941
  var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
936
- const [isLocalProducer, setIsLocalProducer] = useState7(false);
937
- const [error, setError] = useState7();
942
+ const [isLocalProducer, setIsLocalProducer] = useState6(false);
943
+ const [error, setError] = useState6();
938
944
  const [viewer] = usePromise7(async () => {
939
945
  if (isUndefined5(endpoint)) return;
940
946
  const locator = await basicRemoteViewerLocator2(endpoint, {
@@ -948,7 +954,7 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
948
954
  }, [
949
955
  endpoint
950
956
  ]);
951
- useEffect6(() => {
957
+ useEffect5(() => {
952
958
  if (isUndefined5(viewer)) return;
953
959
  void (async () => {
954
960
  setError(void 0);
@@ -1034,7 +1040,7 @@ var DefaultNoWalletInstalledComponent = /* @__PURE__ */ __name(() => /* @__PURE_
1034
1040
  }, "Get XL1 Wallet")), "DefaultNoWalletInstalledComponent");
1035
1041
  var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = ConnectedAccount, ConnectComponent = DefaultConnectComponent, NoWalletInstalledComponent = DefaultNoWalletInstalledComponent, onAccountConnected, onCancel, timeout, ...props }) => {
1036
1042
  const { address, connectSigner, error, timedout } = useConnectAccount(void 0, timeout);
1037
- useEffect7(() => {
1043
+ useEffect6(() => {
1038
1044
  if (isDefined8(error) && isDefined8(onCancel)) {
1039
1045
  onCancel();
1040
1046
  }
@@ -1042,7 +1048,7 @@ var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = Connecte
1042
1048
  error,
1043
1049
  onCancel
1044
1050
  ]);
1045
- useEffect7(() => {
1051
+ useEffect6(() => {
1046
1052
  if (isDefined8(address) && isDefined8(onAccountConnected)) {
1047
1053
  onAccountConnected(address);
1048
1054
  }
@@ -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/buildGateway.ts","../../src/lib/findMinimumBlock.ts","../../src/hooks/client/useClientFromWallet.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/useGatewayFromWallet.ts","../../src/contexts/current-block/context.ts","../../src/contexts/current-block/Provider.tsx","../../src/contexts/current-block/usePollCurrentBlock.ts","../../src/contexts/current-block/use.ts","../../src/contexts/gateway/context.ts","../../src/contexts/gateway/Provider.tsx","../../src/contexts/in-page-gateways/context.ts","../../src/contexts/in-page-gateways/Provider.tsx","../../src/contexts/in-page-gateways/use.ts","../../src/contexts/gateway/use.ts","../../src/hooks/gateway/useNetwork.ts","../../src/hooks/gateway/useRunner.ts","../../src/hooks/gateway/useViewer.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConfirmTransactionBase.ts","../../src/hooks/useConnectAccount.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/ViewerWithDataLake.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-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 {\n AccountBalanceHistoryItem, XL1BlockRange, XyoViewer,\n} from '@xyo-network/xl1-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.account.balance.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.account.balance.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 { AccountBalanceHistoryItem, AttoXL1 } from '@xyo-network/xl1-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 { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { basicRemoteRunnerLocator, basicRemoteViewerLocator } from '@xyo-network/chain-orchestration'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport type {\n GatewayName, RemoteConfig, SimpleXyoGateway,\n} from '@xyo-network/xl1-sdk'\nimport {\n DefaultNetworks, NetworkDataLakeUrls, XyoGatewayMoniker,\n} from '@xyo-network/xl1-sdk'\n\nexport const buildGateway = async (gatewayName: GatewayName, account?: AccountInstance) => {\n const network = DefaultNetworks.find(network => network.id === gatewayName)\n const resolvedNetwork = assertEx(network, () => `No network found for id ${gatewayName}`)\n\n const remoteConfig: RemoteConfig = {\n rpc: {\n protocol: 'http',\n url: `${resolvedNetwork.url}/rpc`,\n },\n }\n\n const dataLakeEndpoint = NetworkDataLakeUrls[gatewayName]\n\n const locator = isDefined(account)\n ? await basicRemoteRunnerLocator(gatewayName, remoteConfig, account, dataLakeEndpoint)\n : await basicRemoteViewerLocator(gatewayName, remoteConfig, dataLakeEndpoint)\n\n return await locator.getInstance<SimpleXyoGateway>(XyoGatewayMoniker)\n}\n","import type { AccountBalanceHistoryItem } from '@xyo-network/xl1-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-sdk'\nimport {\n useCallback, useEffect, useSyncExternalStore,\n} from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient | null\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({\n client: null, timedout: true, isLoading: false,\n })\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 useClientFromWallet = (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\n/** @deprecated - use useClientFromWallet instead */\nexport const useClient = useClientFromWallet\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { XyoClient } from '@xyo-network/xl1-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, XyoViewer } from '@xyo-network/xl1-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.transaction.byHash?.(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 { useClientFromWallet } from '../useClientFromWallet.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClientFromWallet()\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-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-sdk'\n\nimport type { GatewayFromWallet } from '../../types/index.ts'\nimport { useClientFromWallet } from './useClientFromWallet.ts'\n\nexport const useGatewayFromWallet = (gatewayName?: GatewayName, timeout?: number): GatewayFromWallet => {\n const {\n client, isLoading, error, timedout,\n } = useClientFromWallet(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\n/** @deprecated - useGatewayFromWallet */\nexport const useGateway = useGatewayFromWallet\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { XL1CurrentBlockState } from './state.ts'\n\nexport const XL1CurrentBlockContext = createContextEx<XL1CurrentBlockState>()\n","import type { XyoViewer } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport { XL1CurrentBlockContext } from './context.ts'\nimport type { XL1CurrentBlockPollingConfig, XL1CurrentBlockState } from './state.ts'\nimport { usePollCurrentBlock } from './usePollCurrentBlock.ts'\n\nexport const DEFAULT_POLLING_INTERVAL = 10_000\n\nexport interface XL1CurrentBlockProviderProps extends PropsWithChildren {\n pollingConfig?: XL1CurrentBlockPollingConfig\n viewer?: XyoViewer | null\n}\n\nexport const XL1CurrentBlockProvider: React.FC<XL1CurrentBlockProviderProps> = ({\n pollingConfig, viewer, children,\n}) => {\n const { interval } = useMemo(() => pollingConfig || { interval: DEFAULT_POLLING_INTERVAL }, [pollingConfig])\n const [currentBlock, currentBlockError] = usePollCurrentBlock(viewer, interval)\n\n const value: XL1CurrentBlockState = useMemo(() => ({\n block: currentBlock,\n blockNumber: currentBlock?.[0].block,\n chain: currentBlock?.[0].chain,\n error: currentBlockError,\n pollingConfig,\n provided: true,\n }), [currentBlock, currentBlockError, pollingConfig])\n\n return (\n <XL1CurrentBlockContext value={value}>\n {children}\n </XL1CurrentBlockContext>\n )\n}\n","import { isDefinedNotNull, isUndefinedOrNull } from '@xylabs/sdk-js'\nimport type { SignedHydratedBlock, XyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n startTransition, useEffect, useState,\n} from 'react'\n\nconst DEFAULT_POLL_INTERVAL = 10_000\n\nexport const usePollCurrentBlock = (viewer?: XyoViewer | null, interval = DEFAULT_POLL_INTERVAL, pause = false) => {\n const [currentBlock, setCurrentBlock] = useState<SignedHydratedBlock | null>(null)\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n let isMounted = true\n // Function to fetch the current block\n const fetchBlock = async () => {\n if (isDefinedNotNull(viewer)) {\n try {\n const block = await viewer.currentBlock()\n // Safety check to ensure component is still mounted before updating state\n if (isMounted) {\n startTransition(() => {\n setCurrentBlock((existingBlock) => {\n if (isUndefinedOrNull(existingBlock)) {\n return block\n }\n if (\n isDefinedNotNull(block) && existingBlock?.[0].block !== block[0].block\n ) {\n return block\n }\n return existingBlock\n })\n })\n }\n } catch (err) {\n startTransition(() => {\n setError(err as Error)\n })\n }\n }\n }\n\n // Initial fetch\n void fetchBlock()\n\n // Polling mechanism\n const id = setInterval(() => {\n if (!pause) {\n void fetchBlock()\n }\n }, interval)\n\n return () => {\n isMounted = false\n clearInterval(id)\n }\n }, [viewer, interval, pause])\n\n return [currentBlock, error] as const\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { XL1CurrentBlockContext } from './context.ts'\n\nexport const useXl1CurrentBlockContext = (required = true) => useContextEx(XL1CurrentBlockContext, 'XL1CurrentBlock', required)\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { GatewayState } from './state.ts'\n\nexport const GatewayContext = createContextEx<GatewayState>()\n","/* eslint-disable react-hooks/set-state-in-effect */\n/* eslint-disable react-hooks-extra/no-direct-set-state-in-use-effect */\nimport { isDefinedNotNull, isNull } from '@xylabs/sdk-js'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { GatewayName } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { useGatewayFromWallet } from '../../hooks/index.ts'\nimport type { ContextGatewayType } from '../../types/index.ts'\nimport { useProvidedInPageGateways } from '../in-page-gateways/index.ts'\nimport { GatewayContext } from './context.ts'\nimport type { GatewayState } from './state.ts'\n\nexport interface GatewayProviderProps extends PropsWithChildren {\n gatewayName?: GatewayName\n}\n\nexport const GatewayProvider: React.FC<GatewayProviderProps> = ({ gatewayName, children }) => {\n const [defaultGateway, setDefaultGateway] = useState<ContextGatewayType | null | undefined>()\n const [gateways, setGateways] = useState<GatewayState['gateways']>({\n inPageGateway: undefined,\n walletGateway: undefined,\n })\n\n const {\n gateway: gatewayFromWallet,\n error: gatewayFromWalletError,\n } = useGatewayFromWallet(gatewayName)\n\n const {\n gateways: allGateways,\n errors: allGatewayErrors,\n clearAll,\n } = useProvidedInPageGateways(true)\n\n const gatewayFromConfig = gatewayName ? allGateways[gatewayName] : undefined\n const gatewayFromConfigError = gatewayName ? allGatewayErrors[gatewayName] : undefined\n\n useEffect(() => {\n if (isNull(gatewayFromWallet)) {\n // if no gateway from wallet, use the one from config\n setDefaultGateway(gatewayFromConfig)\n setGateways({\n inPageGateway: gatewayFromConfig,\n walletGateway: null,\n })\n } else if (isDefinedNotNull(gatewayFromWallet)) {\n setDefaultGateway(gatewayFromWallet)\n setGateways({\n inPageGateway: gatewayFromConfig,\n walletGateway: gatewayFromWallet,\n })\n }\n }, [gatewayFromConfig, gatewayFromWallet])\n\n const value = useMemo(() => {\n const value: GatewayState = {\n defaultGateway,\n error: gatewayFromWalletError || gatewayFromConfigError,\n gateways,\n provided: true,\n resetGatewaysFromConfig: clearAll,\n }\n return value\n }, [\n defaultGateway,\n gatewayFromWalletError,\n gatewayFromConfigError,\n gateways,\n clearAll,\n ])\n\n return (\n <GatewayContext value={value}>\n <ErrorRender error={gatewayFromConfigError} />\n {children}\n </GatewayContext>\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { InPageGatewaysState } from './state.ts'\n\nexport const InPageGatewaysContext = createContextEx<InPageGatewaysState>()\n","import type { AccountInstance } from '@xyo-network/sdk-js'\nimport type { GatewayName } from '@xyo-network/xl1-sdk'\nimport { DefaultNetworks } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n startTransition,\n useCallback, useEffect, useMemo, useState,\n} from 'react'\n\nimport { buildGateway } from '../../lib/index.ts'\nimport type { ContextGatewayType } from '../../types/index.ts'\nimport { InPageGatewaysContext } from './context.ts'\nimport type { InPageGatewaysState } from './state.ts'\n\nexport interface InPageGatewaysProviderProps extends PropsWithChildren {\n account?: AccountInstance\n}\n\nexport const InPageGatewaysProvider: React.FC<InPageGatewaysProviderProps> = ({ account, children }) => {\n const [gateways, setGateways] = useState<Partial<Record<GatewayName, ContextGatewayType>>>({})\n const [errors, setErrors] = useState<Partial<Record<GatewayName, Error>>>({})\n const [previousAccount, setPreviousAccount] = useState<AccountInstance | undefined>(account)\n\n // This can come back once we homogenize the type for XyoGateway.\n // Right now, SimpleXyoClient takes XyoGatewayRunners but ideally it would take XyoGateway.\n // const clientInPage = useMemo(() => new SimpleXyoClient(gateways, {}), [gateways])\n\n const clearAll = useCallback(() => {\n setGateways({})\n setErrors({})\n }, [])\n\n if (previousAccount !== account) {\n clearAll()\n setPreviousAccount(account)\n }\n\n useEffect(() => {\n let cancelled = false\n\n const buildAll = async () => {\n const results = await Promise.allSettled(\n DefaultNetworks.map(async (network) => {\n const gateway = await buildGateway(network.id as GatewayName, account)\n return { id: network.id as GatewayName, gateway }\n }),\n )\n\n if (cancelled) return\n\n const nextGateways: Partial<Record<GatewayName, ContextGatewayType>> = {}\n const nextErrors: Partial<Record<GatewayName, Error>> = {}\n\n for (const [index, result] of results.entries()) {\n const networkId = DefaultNetworks[index].id as GatewayName\n if (result.status === 'fulfilled') {\n nextGateways[networkId] = result.value.gateway\n } else {\n nextErrors[networkId] = result.reason instanceof Error ? result.reason : new Error(String(result.reason))\n }\n }\n\n startTransition(() => {\n setGateways(nextGateways)\n setErrors(nextErrors)\n })\n }\n\n void buildAll()\n return () => {\n cancelled = true\n }\n }, [account])\n\n const value = useMemo(() => {\n const value: InPageGatewaysState = {\n clearAll,\n errors,\n gateways,\n provided: true,\n }\n return value\n }, [clearAll, errors, gateways])\n\n return <InPageGatewaysContext value={value}>{children}</InPageGatewaysContext>\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { InPageGatewaysContext } from './context.ts'\n\nexport const useProvidedInPageGateways = (required = true) => useContextEx(InPageGatewaysContext, 'InPageGateways', required)\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { GatewayContext } from './context.ts'\n\nexport const useProvidedGateway = (required = true) => useContextEx(GatewayContext, 'Gateway', required)\n","import { useProvidedGateway } from '../../contexts/index.ts'\n\nexport const useNetworkFromGateway = () => {\n const { defaultGateway } = useProvidedGateway()\n return defaultGateway?.connection?.network\n}\n","import { useProvidedGateway } from '../../contexts/index.ts'\n\nexport const useRunnerFromGateway = () => {\n const { defaultGateway } = useProvidedGateway()\n return defaultGateway?.connection?.runner\n}\n","import { useProvidedGateway } from '../../contexts/index.ts'\n\nexport const useViewerFromGateway = () => {\n const { defaultGateway } = useProvidedGateway()\n return defaultGateway?.connection?.viewer\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, XyoViewer } from '@xyo-network/xl1-sdk'\nimport { ShiftedBigInt } from '@xyo-network/xl1-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.account.balance.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 }, [balancesResult, 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/sdk-js'\nimport type {\n SignedHydratedTransaction, XyoRunner, XyoViewer,\n} from '@xyo-network/xl1-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 type { GatewayName } from '@xyo-network/xl1-sdk'\nimport { MainNetwork } from '@xyo-network/xl1-sdk'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGatewayFromWallet } 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 } = useGatewayFromWallet(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.signer\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 type { UsePromiseState } from '@xylabs/react-promise'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta, XyoViewer } from '@xyo-network/xl1-sdk'\n\nimport { useViewerFromGateway } from './gateway/index.ts'\n\n/* @deprecated - use useCurrentBlockFromGateway instead */\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null): [HydratedBlockWithHashMeta | undefined,\n Error | undefined, UsePromiseState | undefined] => {\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\nexport const useCurrentBlockFromGateway = (refresh = 1) => {\n const viewer = useViewerFromGateway()\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 { DefaultNetworkIds } from '@xyo-network/xl1-sdk'\nimport { SimpleXyoNetwork } from '@xyo-network/xl1-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 { usePromise } from '@xylabs/react-promise'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport {\n SimpleXyoSigner, type XyoConnection, type XyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return usePromise<XyoSigner | undefined>(async () => account ? await SimpleXyoSigner.create({ account }) : undefined, [account])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n delay, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport { basicRemoteViewerLocator } from '@xyo-network/chain-orchestration'\nimport type { JsonRpcXyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n LocalNetwork,\n SequenceNetwork,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\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 isSequenceRpc = useCheckRpc(sequenceRpcEndpoint)\n return isSequenceRpc\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 locator = await basicRemoteViewerLocator(endpoint, { rpc: { protocol: 'http', url: endpoint } })\n\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 }, [isLocalProducer, viewer])\n\n return { isLocalProducer, error }\n}\n","import { type Hash, isNull } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n DataLakeViewer, SignedHydratedBlockWithHashMeta, SignedHydratedTransactionWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n addDataLakePayloads,\n addDataLakePayloadsToPayloads, DataLakeViewerMoniker, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-sdk'\n\n/**\n * A Viewer with data lake capabilities, it will attempt to fill in missing payloads from the\n * data lake viewer if available.\n *\n * THIS IS AN EXPERIMENTAL CLASS! Only intended to prove the data lake viewer functionality works.\n * In the future, it should be refactored to augment any viewer with data lake capabilities,\n * and not rely on inheritance from JsonRpcXyoViewer which has the 'creatable' pattern baked in.\n */\nexport class ViewerWithDataLake extends JsonRpcXyoViewer {\n protected dataLakeViewer: DataLakeViewer | undefined\n\n override async blocksByHash(hash: Hash, limit?: number): Promise<SignedHydratedBlockWithHashMeta[]> {\n const blocks = await super.blocksByHash(hash, limit)\n return await Promise.all(blocks.map(async block => (await addDataLakePayloads(block, this.dataLakeViewer))[0]))\n }\n\n override async blocksByNumber(blockNumber: XL1BlockNumber, limit?: number): Promise<SignedHydratedBlockWithHashMeta[]> {\n const blocks = await super.blocksByNumber(blockNumber, limit)\n return await Promise.all(blocks.map(async block => (await addDataLakePayloads(block, this.dataLakeViewer))[0]))\n }\n\n override async createHandler() {\n await super.createHandler()\n this.dataLakeViewer = await this.locator.tryGetInstance<DataLakeViewer>(DataLakeViewerMoniker)\n }\n\n override async payloadsByHash(hashes: Hash[]) {\n const payloads = await super.payloadsByHash(hashes)\n return (await addDataLakePayloadsToPayloads(hashes, payloads, this.dataLakeViewer))[0]\n }\n\n override async transactionByHash(hash: Hash): Promise<SignedHydratedTransactionWithHashMeta | null> {\n const transaction = await super.transaction.byHash(hash)\n if (!this.dataLakeViewer) return transaction ? [await PayloadBuilder.addHashMeta(transaction[0]), await PayloadBuilder.addHashMeta(transaction[1])] : null\n\n return isNull(transaction)\n ? transaction\n : (await addDataLakePayloads([await PayloadBuilder.addHashMeta(transaction[0]),\n await PayloadBuilder.addHashMeta(transaction[1])], this.dataLakeViewer))[0]\n }\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","assertEx","isDefined","basicRemoteRunnerLocator","basicRemoteViewerLocator","DefaultNetworks","NetworkDataLakeUrls","XyoGatewayMoniker","buildGateway","gatewayName","account","network","DefaultNetworks","find","id","resolvedNetwork","assertEx","remoteConfig","rpc","protocol","url","dataLakeEndpoint","NetworkDataLakeUrls","locator","isDefined","basicRemoteRunnerLocator","basicRemoteViewerLocator","getInstance","XyoGatewayMoniker","findMinimumBlock","history","length","blockNumbers","map","blockBw","block","min","Math","max","useAccountBalanceHistory","address","viewer","maxPage","blockRange","refresh","usePromise","isUndefined","page","lastBlock","pagedHistory","resolvedStartBlock","history","account","balance","accountBalanceHistory","range","length","push","findMinimumBlock","nextHistory","formattedHistory","formatAccountBalanceHistory","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","byHash","isNull","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClientFromWallet","subscribeWithTimeout","useCallback","clientState","useSyncExternalStore","useEffect","globalThis","xyo","isNull","addEventListener","removeEventListener","useClient","usePermissions","client","isLoading","error","timedout","useClientFromWallet","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","useGatewayFromWallet","gatewayName","timeout","client","isLoading","error","timedout","useClientFromWallet","resolveGateway","isNull","isDefined","gateways","gateway","undefined","useGateway","createContextEx","XL1CurrentBlockContext","React","useMemo","isDefinedNotNull","isUndefinedOrNull","startTransition","useEffect","useState","DEFAULT_POLL_INTERVAL","usePollCurrentBlock","viewer","interval","pause","currentBlock","setCurrentBlock","useState","error","setError","useEffect","isMounted","fetchBlock","isDefinedNotNull","block","startTransition","existingBlock","isUndefinedOrNull","err","id","setInterval","clearInterval","DEFAULT_POLLING_INTERVAL","XL1CurrentBlockProvider","pollingConfig","viewer","children","interval","useMemo","currentBlock","currentBlockError","usePollCurrentBlock","value","block","blockNumber","chain","error","provided","React","XL1CurrentBlockContext","useContextEx","useXl1CurrentBlockContext","required","useContextEx","XL1CurrentBlockContext","createContextEx","GatewayContext","isDefinedNotNull","isNull","ErrorRender","React","useEffect","useMemo","useState","createContextEx","InPageGatewaysContext","DefaultNetworks","React","startTransition","useCallback","useEffect","useMemo","useState","InPageGatewaysProvider","account","children","gateways","setGateways","useState","errors","setErrors","previousAccount","setPreviousAccount","clearAll","useCallback","useEffect","cancelled","buildAll","results","Promise","allSettled","DefaultNetworks","map","network","gateway","buildGateway","id","nextGateways","nextErrors","index","result","entries","networkId","status","value","reason","Error","String","startTransition","useMemo","provided","React","InPageGatewaysContext","useContextEx","useProvidedInPageGateways","required","useContextEx","InPageGatewaysContext","GatewayProvider","gatewayName","children","defaultGateway","setDefaultGateway","useState","gateways","setGateways","inPageGateway","undefined","walletGateway","gateway","gatewayFromWallet","error","gatewayFromWalletError","useGatewayFromWallet","allGateways","errors","allGatewayErrors","clearAll","useProvidedInPageGateways","gatewayFromConfig","gatewayFromConfigError","useEffect","isNull","isDefinedNotNull","value","useMemo","provided","resetGatewaysFromConfig","React","GatewayContext","ErrorRender","useContextEx","useProvidedGateway","required","useContextEx","GatewayContext","useNetworkFromGateway","defaultGateway","useProvidedGateway","connection","network","useRunnerFromGateway","defaultGateway","useProvidedGateway","connection","runner","useViewerFromGateway","defaultGateway","useProvidedGateway","connection","viewer","usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useRef","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","balancePromiseRef","useRef","usePromise","isUndefined","undefined","currentPromise","account","balance","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","useGatewayFromWallet","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","connectSigner","useCallback","undefined","assertedGateway","assertEx","signer","e","asAddress","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","useCurrentBlockFromGateway","useViewerFromGateway","isUndefined","SimpleXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","SimpleXyoNetwork","usePromise","SimpleXyoSigner","useSigner","_provider","account","usePromise","SimpleXyoSigner","create","undefined","usePromise","delay","isDefined","isUndefined","basicRemoteViewerLocator","LocalNetwork","SequenceNetwork","XyoViewerMoniker","useEffect","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","isSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","usePromise","isUndefined","locator","basicRemoteViewerLocator","rpc","protocol","getInstance","XyoViewerMoniker","useEffect","undefined","block","currentBlock","isDefined","err","delay","isNull","PayloadBuilder","addDataLakePayloads","addDataLakePayloadsToPayloads","DataLakeViewerMoniker","JsonRpcXyoViewer","ViewerWithDataLake","JsonRpcXyoViewer","dataLakeViewer","blocksByHash","hash","limit","blocks","Promise","all","map","block","addDataLakePayloads","blocksByNumber","blockNumber","createHandler","locator","tryGetInstance","DataLakeViewerMoniker","payloadsByHash","hashes","payloads","addDataLakePayloadsToPayloads","transactionByHash","transaction","byHash","PayloadBuilder","addHashMeta","isNull","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/buildGateway.ts","../../src/lib/findMinimumBlock.ts","../../src/hooks/client/useClientFromWallet.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/useGatewayFromWallet.ts","../../src/contexts/current-block/context.ts","../../src/contexts/current-block/Provider.tsx","../../src/contexts/current-block/usePollCurrentBlock.ts","../../src/contexts/current-block/use.ts","../../src/contexts/gateway/context.ts","../../src/contexts/gateway/Provider.tsx","../../src/contexts/in-page-gateways/context.ts","../../src/contexts/in-page-gateways/Provider.tsx","../../src/contexts/in-page-gateways/use.ts","../../src/contexts/gateway/use.ts","../../src/hooks/gateway/useNetwork.ts","../../src/hooks/gateway/useRunner.ts","../../src/hooks/gateway/useViewer.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConfirmTransactionBase.ts","../../src/hooks/useConnectAccount.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/ViewerWithDataLake.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-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 {\n AccountBalanceHistoryItem, XL1BlockRange, XyoViewer,\n} from '@xyo-network/xl1-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.account.balance.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.account.balance.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 { AccountBalanceHistoryItem, AttoXL1 } from '@xyo-network/xl1-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 { assertEx, isDefined } from '@xylabs/sdk-js'\nimport { basicRemoteRunnerLocator, basicRemoteViewerLocator } from '@xyo-network/chain-orchestration'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport type {\n GatewayName, RemoteConfig, SimpleXyoGateway,\n} from '@xyo-network/xl1-sdk'\nimport {\n DefaultNetworks, NetworkDataLakeUrls, XyoGatewayMoniker,\n} from '@xyo-network/xl1-sdk'\n\nexport const buildGateway = async (gatewayName: GatewayName, account?: AccountInstance) => {\n const network = DefaultNetworks.find(network => network.id === gatewayName)\n const resolvedNetwork = assertEx(network, () => `No network found for id ${gatewayName}`)\n\n const remoteConfig: RemoteConfig = {\n rpc: {\n protocol: 'http',\n url: `${resolvedNetwork.url}/rpc`,\n },\n }\n\n const dataLakeEndpoint = NetworkDataLakeUrls[gatewayName]\n\n const locator = isDefined(account)\n ? await basicRemoteRunnerLocator(gatewayName, remoteConfig, account, dataLakeEndpoint)\n : await basicRemoteViewerLocator(gatewayName, remoteConfig, dataLakeEndpoint)\n\n return await locator.getInstance<SimpleXyoGateway>(XyoGatewayMoniker)\n}\n","import type { AccountBalanceHistoryItem } from '@xyo-network/xl1-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-sdk'\nimport {\n useCallback, useEffect, useSyncExternalStore,\n} from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient | null\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({\n client: null, timedout: true, isLoading: false,\n })\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 useClientFromWallet = (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\n/** @deprecated - use useClientFromWallet instead */\nexport const useClient = useClientFromWallet\n","import { isUndefined } from '@xylabs/sdk-js'\nimport type { XyoClient } from '@xyo-network/xl1-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, XyoViewer } from '@xyo-network/xl1-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.transaction.byHash?.(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 { useClientFromWallet } from '../useClientFromWallet.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClientFromWallet()\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-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-sdk'\n\nimport type { GatewayFromWallet } from '../../types/index.ts'\nimport { useClientFromWallet } from './useClientFromWallet.ts'\n\nexport const useGatewayFromWallet = (gatewayName?: GatewayName, timeout?: number): GatewayFromWallet => {\n const {\n client, isLoading, error, timedout,\n } = useClientFromWallet(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\n/** @deprecated - useGatewayFromWallet */\nexport const useGateway = useGatewayFromWallet\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { XL1CurrentBlockState } from './state.ts'\n\nexport const XL1CurrentBlockContext = createContextEx<XL1CurrentBlockState>()\n","import type { XyoViewer } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport { XL1CurrentBlockContext } from './context.ts'\nimport type { XL1CurrentBlockPollingConfig, XL1CurrentBlockState } from './state.ts'\nimport { usePollCurrentBlock } from './usePollCurrentBlock.ts'\n\nexport const DEFAULT_POLLING_INTERVAL = 10_000\n\nexport interface XL1CurrentBlockProviderProps extends PropsWithChildren {\n pollingConfig?: XL1CurrentBlockPollingConfig\n viewer?: XyoViewer | null\n}\n\nexport const XL1CurrentBlockProvider: React.FC<XL1CurrentBlockProviderProps> = ({\n pollingConfig, viewer, children,\n}) => {\n const { interval } = useMemo(() => pollingConfig || { interval: DEFAULT_POLLING_INTERVAL }, [pollingConfig])\n const [currentBlock, currentBlockError] = usePollCurrentBlock(viewer, interval)\n\n const value: XL1CurrentBlockState = useMemo(() => ({\n block: currentBlock,\n blockNumber: currentBlock?.[0].block,\n chain: currentBlock?.[0].chain,\n error: currentBlockError,\n pollingConfig,\n provided: true,\n }), [currentBlock, currentBlockError, pollingConfig])\n\n return (\n <XL1CurrentBlockContext value={value}>\n {children}\n </XL1CurrentBlockContext>\n )\n}\n","import { isDefinedNotNull, isUndefinedOrNull } from '@xylabs/sdk-js'\nimport type { SignedHydratedBlock, XyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n startTransition, useEffect, useState,\n} from 'react'\n\nconst DEFAULT_POLL_INTERVAL = 10_000\n\nexport const usePollCurrentBlock = (viewer?: XyoViewer | null, interval = DEFAULT_POLL_INTERVAL, pause = false) => {\n const [currentBlock, setCurrentBlock] = useState<SignedHydratedBlock | null>(null)\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n let isMounted = true\n // Function to fetch the current block\n const fetchBlock = async () => {\n if (isDefinedNotNull(viewer)) {\n try {\n const block = await viewer.currentBlock()\n // Safety check to ensure component is still mounted before updating state\n if (isMounted) {\n startTransition(() => {\n setCurrentBlock((existingBlock) => {\n if (isUndefinedOrNull(existingBlock)) {\n return block\n }\n if (\n isDefinedNotNull(block) && existingBlock?.[0].block !== block[0].block\n ) {\n return block\n }\n return existingBlock\n })\n })\n }\n } catch (err) {\n startTransition(() => {\n setError(err as Error)\n })\n }\n }\n }\n\n // Initial fetch\n void fetchBlock()\n\n // Polling mechanism\n const id = setInterval(() => {\n if (!pause) {\n void fetchBlock()\n }\n }, interval)\n\n return () => {\n isMounted = false\n clearInterval(id)\n }\n }, [viewer, interval, pause])\n\n return [currentBlock, error] as const\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { XL1CurrentBlockContext } from './context.ts'\n\nexport const useXl1CurrentBlockContext = (required = true) => useContextEx(XL1CurrentBlockContext, 'XL1CurrentBlock', required)\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { GatewayState } from './state.ts'\n\nexport const GatewayContext = createContextEx<GatewayState>()\n","import { isDefinedNotNull, isNull } from '@xylabs/sdk-js'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { GatewayName } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport { useGatewayFromWallet } from '../../hooks/index.ts'\nimport { useProvidedInPageGateways } from '../in-page-gateways/index.ts'\nimport { GatewayContext } from './context.ts'\nimport type { GatewayState } from './state.ts'\n\nexport interface GatewayProviderProps extends PropsWithChildren {\n gatewayName?: GatewayName\n}\n\nexport const GatewayProvider: React.FC<GatewayProviderProps> = ({ gatewayName, children }) => {\n const {\n gateway: gatewayFromWallet,\n error: gatewayFromWalletError,\n } = useGatewayFromWallet(gatewayName)\n\n const {\n gateways: allGateways,\n errors: allGatewayErrors,\n clearAll,\n } = useProvidedInPageGateways(true)\n\n const gatewayFromConfig = gatewayName ? allGateways[gatewayName] : undefined\n const gatewayFromConfigError = gatewayName ? allGatewayErrors[gatewayName] : undefined\n\n const { defaultGateway, gateways } = useMemo(() => {\n if (isNull(gatewayFromWallet)) {\n return {\n defaultGateway: gatewayFromConfig,\n gateways: {\n inPageGateway: gatewayFromConfig,\n walletGateway: null,\n },\n }\n } else if (isDefinedNotNull(gatewayFromWallet)) {\n return {\n defaultGateway: gatewayFromWallet,\n gateways: {\n inPageGateway: gatewayFromConfig,\n walletGateway: gatewayFromWallet,\n },\n }\n }\n return {\n defaultGateway: undefined,\n gateways: {\n inPageGateway: undefined,\n walletGateway: undefined,\n },\n }\n }, [gatewayFromConfig, gatewayFromWallet])\n\n const value = useMemo(() => {\n const value: GatewayState = {\n defaultGateway,\n error: gatewayFromWalletError || gatewayFromConfigError,\n gateways,\n provided: true,\n resetGatewaysFromConfig: clearAll,\n }\n return value\n }, [\n defaultGateway,\n gatewayFromWalletError,\n gatewayFromConfigError,\n gateways,\n clearAll,\n ])\n\n return (\n <GatewayContext value={value}>\n <ErrorRender error={gatewayFromConfigError} />\n {children}\n </GatewayContext>\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { InPageGatewaysState } from './state.ts'\n\nexport const InPageGatewaysContext = createContextEx<InPageGatewaysState>()\n","import type { AccountInstance } from '@xyo-network/sdk-js'\nimport type { GatewayName } from '@xyo-network/xl1-sdk'\nimport { DefaultNetworks } from '@xyo-network/xl1-sdk'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n startTransition,\n useCallback, useEffect, useMemo, useState,\n} from 'react'\n\nimport { buildGateway } from '../../lib/index.ts'\nimport type { ContextGatewayType } from '../../types/index.ts'\nimport { InPageGatewaysContext } from './context.ts'\nimport type { InPageGatewaysState } from './state.ts'\n\nexport interface InPageGatewaysProviderProps extends PropsWithChildren {\n account?: AccountInstance\n}\n\nexport const InPageGatewaysProvider: React.FC<InPageGatewaysProviderProps> = ({ account, children }) => {\n const [gateways, setGateways] = useState<Partial<Record<GatewayName, ContextGatewayType>>>({})\n const [errors, setErrors] = useState<Partial<Record<GatewayName, Error>>>({})\n const [previousAccount, setPreviousAccount] = useState<AccountInstance | undefined>(account)\n\n // This can come back once we homogenize the type for XyoGateway.\n // Right now, SimpleXyoClient takes XyoGatewayRunners but ideally it would take XyoGateway.\n // const clientInPage = useMemo(() => new SimpleXyoClient(gateways, {}), [gateways])\n\n const clearAll = useCallback(() => {\n setGateways({})\n setErrors({})\n }, [])\n\n if (previousAccount !== account) {\n clearAll()\n setPreviousAccount(account)\n }\n\n useEffect(() => {\n let cancelled = false\n\n const buildAll = async () => {\n const results = await Promise.allSettled(\n DefaultNetworks.map(async (network) => {\n const gateway = await buildGateway(network.id as GatewayName, account)\n return { id: network.id as GatewayName, gateway }\n }),\n )\n\n if (cancelled) return\n\n const nextGateways: Partial<Record<GatewayName, ContextGatewayType>> = {}\n const nextErrors: Partial<Record<GatewayName, Error>> = {}\n\n for (const [index, result] of results.entries()) {\n const networkId = DefaultNetworks[index].id as GatewayName\n if (result.status === 'fulfilled') {\n nextGateways[networkId] = result.value.gateway\n } else {\n nextErrors[networkId] = result.reason instanceof Error ? result.reason : new Error(String(result.reason))\n }\n }\n\n startTransition(() => {\n setGateways(nextGateways)\n setErrors(nextErrors)\n })\n }\n\n void buildAll()\n return () => {\n cancelled = true\n }\n }, [account])\n\n const value = useMemo(() => {\n const value: InPageGatewaysState = {\n clearAll,\n errors,\n gateways,\n provided: true,\n }\n return value\n }, [clearAll, errors, gateways])\n\n return <InPageGatewaysContext value={value}>{children}</InPageGatewaysContext>\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { InPageGatewaysContext } from './context.ts'\n\nexport const useProvidedInPageGateways = (required = true) => useContextEx(InPageGatewaysContext, 'InPageGateways', required)\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { GatewayContext } from './context.ts'\n\nexport const useProvidedGateway = (required = true) => useContextEx(GatewayContext, 'Gateway', required)\n","import { useProvidedGateway } from '../../contexts/index.ts'\n\nexport const useNetworkFromGateway = () => {\n const { defaultGateway } = useProvidedGateway()\n return defaultGateway?.connection?.network\n}\n","import { useProvidedGateway } from '../../contexts/index.ts'\n\nexport const useRunnerFromGateway = () => {\n const { defaultGateway } = useProvidedGateway()\n return defaultGateway?.connection?.runner\n}\n","import { useProvidedGateway } from '../../contexts/index.ts'\n\nexport const useViewerFromGateway = () => {\n const { defaultGateway } = useProvidedGateway()\n return defaultGateway?.connection?.viewer\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, XyoViewer } from '@xyo-network/xl1-sdk'\nimport { ShiftedBigInt } from '@xyo-network/xl1-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 // reset balance trigger - clears state immediately\n reset?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n const [previousReset, setPreviousReset] = useState<number | undefined>(reset)\n if (reset !== previousReset) {\n setPreviousReset(reset)\n setBalancesResult(undefined)\n setBalancesError(undefined)\n setLoading(false)\n }\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.account.balance.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 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 }, [balancesResult, 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/sdk-js'\nimport type {\n SignedHydratedTransaction, XyoRunner, XyoViewer,\n} from '@xyo-network/xl1-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 type { GatewayName } from '@xyo-network/xl1-sdk'\nimport { MainNetwork } from '@xyo-network/xl1-sdk'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGatewayFromWallet } 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 } = useGatewayFromWallet(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.signer\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 type { UsePromiseState } from '@xylabs/react-promise'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/sdk-js'\nimport type { HydratedBlockWithHashMeta, XyoViewer } from '@xyo-network/xl1-sdk'\n\nimport { useViewerFromGateway } from './gateway/index.ts'\n\n/* @deprecated - use useCurrentBlockFromGateway instead */\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null): [HydratedBlockWithHashMeta | undefined,\n Error | undefined, UsePromiseState | undefined] => {\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\nexport const useCurrentBlockFromGateway = (refresh = 1) => {\n const viewer = useViewerFromGateway()\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 { DefaultNetworkIds } from '@xyo-network/xl1-sdk'\nimport { SimpleXyoNetwork } from '@xyo-network/xl1-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 { usePromise } from '@xylabs/react-promise'\nimport type { AccountInstance } from '@xyo-network/sdk-js'\nimport {\n SimpleXyoSigner, type XyoConnection, type XyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return usePromise<XyoSigner | undefined>(async () => account ? await SimpleXyoSigner.create({ account }) : undefined, [account])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n delay, isDefined, isUndefined,\n} from '@xylabs/sdk-js'\nimport { basicRemoteViewerLocator } from '@xyo-network/chain-orchestration'\nimport type { JsonRpcXyoViewer } from '@xyo-network/xl1-sdk'\nimport {\n LocalNetwork,\n SequenceNetwork,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\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 isSequenceRpc = useCheckRpc(sequenceRpcEndpoint)\n return isSequenceRpc\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 locator = await basicRemoteViewerLocator(endpoint, { rpc: { protocol: 'http', url: endpoint } })\n\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 }, [isLocalProducer, viewer])\n\n return { isLocalProducer, error }\n}\n","import { type Hash, isNull } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type {\n DataLakeViewer, SignedHydratedBlockWithHashMeta, SignedHydratedTransactionWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n addDataLakePayloads,\n addDataLakePayloadsToPayloads, DataLakeViewerMoniker, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-sdk'\n\n/**\n * A Viewer with data lake capabilities, it will attempt to fill in missing payloads from the\n * data lake viewer if available.\n *\n * THIS IS AN EXPERIMENTAL CLASS! Only intended to prove the data lake viewer functionality works.\n * In the future, it should be refactored to augment any viewer with data lake capabilities,\n * and not rely on inheritance from JsonRpcXyoViewer which has the 'creatable' pattern baked in.\n */\nexport class ViewerWithDataLake extends JsonRpcXyoViewer {\n protected dataLakeViewer: DataLakeViewer | undefined\n\n override async blocksByHash(hash: Hash, limit?: number): Promise<SignedHydratedBlockWithHashMeta[]> {\n const blocks = await super.blocksByHash(hash, limit)\n return await Promise.all(blocks.map(async block => (await addDataLakePayloads(block, this.dataLakeViewer))[0]))\n }\n\n override async blocksByNumber(blockNumber: XL1BlockNumber, limit?: number): Promise<SignedHydratedBlockWithHashMeta[]> {\n const blocks = await super.blocksByNumber(blockNumber, limit)\n return await Promise.all(blocks.map(async block => (await addDataLakePayloads(block, this.dataLakeViewer))[0]))\n }\n\n override async createHandler() {\n await super.createHandler()\n this.dataLakeViewer = await this.locator.tryGetInstance<DataLakeViewer>(DataLakeViewerMoniker)\n }\n\n override async payloadsByHash(hashes: Hash[]) {\n const payloads = await super.payloadsByHash(hashes)\n return (await addDataLakePayloadsToPayloads(hashes, payloads, this.dataLakeViewer))[0]\n }\n\n override async transactionByHash(hash: Hash): Promise<SignedHydratedTransactionWithHashMeta | null> {\n const transaction = await super.transaction.byHash(hash)\n if (!this.dataLakeViewer) return transaction ? [await PayloadBuilder.addHashMeta(transaction[0]), await PayloadBuilder.addHashMeta(transaction[1])] : null\n\n return isNull(transaction)\n ? transaction\n : (await addDataLakePayloads([await PayloadBuilder.addHashMeta(transaction[0]),\n await PayloadBuilder.addHashMeta(transaction[1])], this.dataLakeViewer))[0]\n }\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","assertEx","isDefined","basicRemoteRunnerLocator","basicRemoteViewerLocator","DefaultNetworks","NetworkDataLakeUrls","XyoGatewayMoniker","buildGateway","gatewayName","account","network","DefaultNetworks","find","id","resolvedNetwork","assertEx","remoteConfig","rpc","protocol","url","dataLakeEndpoint","NetworkDataLakeUrls","locator","isDefined","basicRemoteRunnerLocator","basicRemoteViewerLocator","getInstance","XyoGatewayMoniker","findMinimumBlock","history","length","blockNumbers","map","blockBw","block","min","Math","max","useAccountBalanceHistory","address","viewer","maxPage","blockRange","refresh","usePromise","isUndefined","page","lastBlock","pagedHistory","resolvedStartBlock","history","account","balance","accountBalanceHistory","range","length","push","findMinimumBlock","nextHistory","formattedHistory","formatAccountBalanceHistory","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","byHash","isNull","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClientFromWallet","subscribeWithTimeout","useCallback","clientState","useSyncExternalStore","useEffect","globalThis","xyo","isNull","addEventListener","removeEventListener","useClient","usePermissions","client","isLoading","error","timedout","useClientFromWallet","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","useGatewayFromWallet","gatewayName","timeout","client","isLoading","error","timedout","useClientFromWallet","resolveGateway","isNull","isDefined","gateways","gateway","undefined","useGateway","createContextEx","XL1CurrentBlockContext","React","useMemo","isDefinedNotNull","isUndefinedOrNull","startTransition","useEffect","useState","DEFAULT_POLL_INTERVAL","usePollCurrentBlock","viewer","interval","pause","currentBlock","setCurrentBlock","useState","error","setError","useEffect","isMounted","fetchBlock","isDefinedNotNull","block","startTransition","existingBlock","isUndefinedOrNull","err","id","setInterval","clearInterval","DEFAULT_POLLING_INTERVAL","XL1CurrentBlockProvider","pollingConfig","viewer","children","interval","useMemo","currentBlock","currentBlockError","usePollCurrentBlock","value","block","blockNumber","chain","error","provided","React","XL1CurrentBlockContext","useContextEx","useXl1CurrentBlockContext","required","useContextEx","XL1CurrentBlockContext","createContextEx","GatewayContext","isDefinedNotNull","isNull","ErrorRender","React","useMemo","createContextEx","InPageGatewaysContext","DefaultNetworks","React","startTransition","useCallback","useEffect","useMemo","useState","InPageGatewaysProvider","account","children","gateways","setGateways","useState","errors","setErrors","previousAccount","setPreviousAccount","clearAll","useCallback","useEffect","cancelled","buildAll","results","Promise","allSettled","DefaultNetworks","map","network","gateway","buildGateway","id","nextGateways","nextErrors","index","result","entries","networkId","status","value","reason","Error","String","startTransition","useMemo","provided","React","InPageGatewaysContext","useContextEx","useProvidedInPageGateways","required","useContextEx","InPageGatewaysContext","GatewayProvider","gatewayName","children","gateway","gatewayFromWallet","error","gatewayFromWalletError","useGatewayFromWallet","gateways","allGateways","errors","allGatewayErrors","clearAll","useProvidedInPageGateways","gatewayFromConfig","undefined","gatewayFromConfigError","defaultGateway","useMemo","isNull","inPageGateway","walletGateway","isDefinedNotNull","value","provided","resetGatewaysFromConfig","React","GatewayContext","ErrorRender","useContextEx","useProvidedGateway","required","useContextEx","GatewayContext","useNetworkFromGateway","defaultGateway","useProvidedGateway","connection","network","useRunnerFromGateway","defaultGateway","useProvidedGateway","connection","runner","useViewerFromGateway","defaultGateway","useProvidedGateway","connection","viewer","usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useRef","useState","useAddressBalance","address","viewer","refresh","reset","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","previousReset","setPreviousReset","undefined","balancePromiseRef","useRef","usePromise","isUndefined","currentPromise","account","balance","accountBalance","current","result","err","console","error","shiftedBigInt","useMemo","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","useGatewayFromWallet","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","connectSigner","useCallback","undefined","assertedGateway","assertEx","signer","e","asAddress","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","useCurrentBlockFromGateway","useViewerFromGateway","isUndefined","SimpleXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","SimpleXyoNetwork","usePromise","SimpleXyoSigner","useSigner","_provider","account","usePromise","SimpleXyoSigner","create","undefined","usePromise","delay","isDefined","isUndefined","basicRemoteViewerLocator","LocalNetwork","SequenceNetwork","XyoViewerMoniker","useEffect","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","isSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","usePromise","isUndefined","locator","basicRemoteViewerLocator","rpc","protocol","getInstance","XyoViewerMoniker","useEffect","undefined","block","currentBlock","isDefined","err","delay","isNull","PayloadBuilder","addDataLakePayloads","addDataLakePayloadsToPayloads","DataLakeViewerMoniker","JsonRpcXyoViewer","ViewerWithDataLake","JsonRpcXyoViewer","dataLakeViewer","blocksByHash","hash","limit","blocks","Promise","all","map","block","addDataLakePayloads","blocksByNumber","blockNumber","createHandler","locator","tryGetInstance","DataLakeViewerMoniker","payloadsByHash","hashes","payloads","addDataLakePayloadsToPayloads","transactionByHash","transaction","byHash","PayloadBuilder","addHashMeta","isNull","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,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/react-chain-provider",
3
- "version": "1.20.5",
3
+ "version": "1.20.9",
4
4
  "description": "XYO Layer One API",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -43,11 +43,12 @@
43
43
  "!**/*.test.*"
44
44
  ],
45
45
  "dependencies": {
46
+ "@storybook/react-vite": "^10.3.3",
46
47
  "@xylabs/react-button": "~7.1.17",
47
48
  "@xylabs/react-promise": "~7.1.17",
48
49
  "@xylabs/react-shared": "~7.1.17",
49
- "@xyo-network/chain-orchestration": "~1.20.5",
50
- "@xyo-network/react-chain-blockies": "~1.20.5",
50
+ "@xyo-network/chain-orchestration": "~1.20.9",
51
+ "@xyo-network/react-chain-blockies": "~1.20.9",
51
52
  "@xyo-network/react-error": "~7.5.5"
52
53
  },
53
54
  "devDependencies": {
@@ -55,30 +56,30 @@
55
56
  "@emotion/styled": "~11.14.1",
56
57
  "@mui/icons-material": "^7.3.9",
57
58
  "@mui/material": "~7.3.9",
58
- "@storybook/react-vite": "^10.2.17",
59
+ "@storybook/react-vite": "^10.3.3",
59
60
  "@types/react": "~19.2.14",
60
61
  "@xylabs/react-button": "~7.1.17",
61
- "@xylabs/sdk-js": "~5.0.83",
62
- "@xylabs/ts-scripts-yarn3": "~7.4.13",
63
- "@xylabs/tsconfig": "~7.4.13",
64
- "@xylabs/tsconfig-dom": "~7.4.13",
65
- "@xylabs/tsconfig-react": "~7.4.13",
66
- "@xyo-network/react-chain-model": "~1.20.5",
67
- "@xyo-network/react-chain-shared": "~1.20.5",
62
+ "@xylabs/sdk-js": "~5.0.87",
63
+ "@xylabs/ts-scripts-yarn3": "~7.4.28",
64
+ "@xylabs/tsconfig": "~7.4.28",
65
+ "@xylabs/tsconfig-dom": "~7.4.28",
66
+ "@xylabs/tsconfig-react": "~7.4.28",
67
+ "@xyo-network/react-chain-model": "~1.20.9",
68
+ "@xyo-network/react-chain-shared": "~1.20.9",
68
69
  "@xyo-network/react-error": "~7.5.5",
69
- "@xyo-network/sdk-js": "~5.3.15",
70
- "@xyo-network/xl1-sdk": "~1.25.22",
70
+ "@xyo-network/sdk-js": "~5.3.16",
71
+ "@xyo-network/xl1-sdk": "~1.26.4",
71
72
  "axios": "^1.13.6",
72
73
  "dotenv": "~17.3.1",
73
74
  "ethers": "^6.16.0",
74
75
  "react": "~19.2.4",
75
76
  "react-dom": "^19.2.4",
76
- "react-router-dom": "^7.13.1",
77
- "rollbar": "^3.0.0",
78
- "storybook": "^10.2.17",
77
+ "react-router-dom": "^7.13.2",
78
+ "rollbar": "^3.1.0",
79
+ "storybook": "^10.3.3",
79
80
  "typescript": "~5.9.3",
80
- "vite": "^7.3.1",
81
- "vitest": "~4.0.18",
81
+ "vite": "^8.0.2",
82
+ "vitest": "^4.1.1",
82
83
  "zod": "^4.3.6"
83
84
  },
84
85
  "peerDependencies": {
@@ -1,15 +1,10 @@
1
- /* eslint-disable react-hooks/set-state-in-effect */
2
- /* eslint-disable react-hooks-extra/no-direct-set-state-in-use-effect */
3
1
  import { isDefinedNotNull, isNull } from '@xylabs/sdk-js'
4
2
  import { ErrorRender } from '@xyo-network/react-error'
5
3
  import type { GatewayName } from '@xyo-network/xl1-sdk'
6
4
  import type { PropsWithChildren } from 'react'
7
- import React, {
8
- useEffect, useMemo, useState,
9
- } from 'react'
5
+ import React, { useMemo } from 'react'
10
6
 
11
7
  import { useGatewayFromWallet } from '../../hooks/index.ts'
12
- import type { ContextGatewayType } from '../../types/index.ts'
13
8
  import { useProvidedInPageGateways } from '../in-page-gateways/index.ts'
14
9
  import { GatewayContext } from './context.ts'
15
10
  import type { GatewayState } from './state.ts'
@@ -19,12 +14,6 @@ export interface GatewayProviderProps extends PropsWithChildren {
19
14
  }
20
15
 
21
16
  export const GatewayProvider: React.FC<GatewayProviderProps> = ({ gatewayName, children }) => {
22
- const [defaultGateway, setDefaultGateway] = useState<ContextGatewayType | null | undefined>()
23
- const [gateways, setGateways] = useState<GatewayState['gateways']>({
24
- inPageGateway: undefined,
25
- walletGateway: undefined,
26
- })
27
-
28
17
  const {
29
18
  gateway: gatewayFromWallet,
30
19
  error: gatewayFromWalletError,
@@ -39,20 +28,30 @@ export const GatewayProvider: React.FC<GatewayProviderProps> = ({ gatewayName, c
39
28
  const gatewayFromConfig = gatewayName ? allGateways[gatewayName] : undefined
40
29
  const gatewayFromConfigError = gatewayName ? allGatewayErrors[gatewayName] : undefined
41
30
 
42
- useEffect(() => {
31
+ const { defaultGateway, gateways } = useMemo(() => {
43
32
  if (isNull(gatewayFromWallet)) {
44
- // if no gateway from wallet, use the one from config
45
- setDefaultGateway(gatewayFromConfig)
46
- setGateways({
47
- inPageGateway: gatewayFromConfig,
48
- walletGateway: null,
49
- })
33
+ return {
34
+ defaultGateway: gatewayFromConfig,
35
+ gateways: {
36
+ inPageGateway: gatewayFromConfig,
37
+ walletGateway: null,
38
+ },
39
+ }
50
40
  } else if (isDefinedNotNull(gatewayFromWallet)) {
51
- setDefaultGateway(gatewayFromWallet)
52
- setGateways({
53
- inPageGateway: gatewayFromConfig,
54
- walletGateway: gatewayFromWallet,
55
- })
41
+ return {
42
+ defaultGateway: gatewayFromWallet,
43
+ gateways: {
44
+ inPageGateway: gatewayFromConfig,
45
+ walletGateway: gatewayFromWallet,
46
+ },
47
+ }
48
+ }
49
+ return {
50
+ defaultGateway: undefined,
51
+ gateways: {
52
+ inPageGateway: undefined,
53
+ walletGateway: undefined,
54
+ },
56
55
  }
57
56
  }, [gatewayFromConfig, gatewayFromWallet])
58
57
 
@@ -1,5 +1,5 @@
1
1
  import { Alert, Stack } from '@mui/material'
2
- import type { Meta, StoryObj } from '@storybook/react-vite'
2
+ import type { Meta, StoryFn } from '@storybook/react-vite'
3
3
  import { isDefinedNotNull, isNull } from '@xylabs/sdk-js'
4
4
  import { IframeWalletWarningDecorator } from '@xyo-network/react-chain-shared'
5
5
  import type { GatewayName } from '@xyo-network/xl1-sdk'
@@ -19,30 +19,25 @@ const meta: Meta<GatewayProviderProps> = {
19
19
 
20
20
  export default meta
21
21
 
22
- type Story = StoryObj<GatewayProviderProps>
23
-
24
- /**
25
- * Convenience story that proves ALL client gateways are represented.
26
- * Each row corresponds to one entry in the client's gateways.
27
- */
28
- const AllClientGateways: Story = {
29
- name: 'All Client Gateways',
30
- render: () => {
31
- const { client } = useClientFromWallet()
32
- const foundClient = isDefinedNotNull(client)
33
- const notFoundClient = isNull(client)
34
- return (
35
- <Stack gap={3} p={2}>
36
- <Alert severity={foundClient ? 'success' : 'error'}>
37
- {foundClient ? 'Client found, displaying gateways:' : ''}
38
- {notFoundClient ? 'No client found. Please ensure your wallet is connected and has access to the current page.' : ''}
39
- </Alert>
40
- {Object.keys(client?.gateways || {}).map(id => (
41
- <GatewayStats key={id} id={id as GatewayName} />
42
- ))}
43
- </Stack>
44
- )
45
- },
22
+ const TestClientGateways: React.FC = () => {
23
+ const { client } = useClientFromWallet()
24
+ const foundClient = isDefinedNotNull(client)
25
+ const notFoundClient = isNull(client)
26
+ return (
27
+ <Stack gap={3} p={2}>
28
+ <Alert severity={foundClient ? 'success' : 'error'}>
29
+ {foundClient ? 'Client found, displaying gateways:' : ''}
30
+ {notFoundClient ? 'No client found. Please ensure your wallet is connected and has access to the current page.' : ''}
31
+ </Alert>
32
+ {Object.keys(client?.gateways || {}).map(id => (
33
+ <GatewayStats key={id} id={id as GatewayName} />
34
+ ))}
35
+ </Stack>
36
+ )
46
37
  }
47
38
 
39
+ const Template: StoryFn = args => <TestClientGateways {...args} />
40
+
41
+ const AllClientGateways = Template.bind({})
42
+
48
43
  export { AllClientGateways }
@@ -14,11 +14,21 @@ export const useAddressBalance = (
14
14
  viewer?: XyoViewer,
15
15
  // refresh balance trigger
16
16
  refresh?: number,
17
+ // reset balance trigger - clears state immediately
18
+ reset?: number,
17
19
  ) => {
18
20
  const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()
19
21
  const [loading, setLoading] = useState(false)
20
22
  const [balancesError, setBalancesError] = useState<Error>()
21
23
 
24
+ const [previousReset, setPreviousReset] = useState<number | undefined>(reset)
25
+ if (reset !== previousReset) {
26
+ setPreviousReset(reset)
27
+ setBalancesResult(undefined)
28
+ setBalancesError(undefined)
29
+ setLoading(false)
30
+ }
31
+
22
32
  const balancePromiseRef = useRef<Promise<AttoXL1> | null>(null)
23
33
  usePromise(async () => {
24
34
  if (isUndefined(viewer) || isUndefined(address)) return
@@ -48,12 +58,6 @@ export const useAddressBalance = (
48
58
  }
49
59
  }, [address, viewer, refresh])
50
60
 
51
- useMemo(() => {
52
- if (balancesError) {
53
- setLoading(false)
54
- }
55
- }, [balancesError])
56
-
57
61
  const shiftedBigInt = useMemo(() => {
58
62
  if (typeof balancesResult !== 'bigint') return
59
63
  return new ShiftedBigInt(balancesResult, {