@solana/react-hooks 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/index.browser.cjs +189 -0
  2. package/dist/index.browser.cjs.map +1 -1
  3. package/dist/index.browser.mjs +187 -2
  4. package/dist/index.browser.mjs.map +1 -1
  5. package/dist/index.native.mjs +187 -2
  6. package/dist/index.native.mjs.map +1 -1
  7. package/dist/index.node.cjs +189 -0
  8. package/dist/index.node.cjs.map +1 -1
  9. package/dist/index.node.mjs +187 -2
  10. package/dist/index.node.mjs.map +1 -1
  11. package/dist/types/QueryProvider.d.ts.map +1 -0
  12. package/dist/types/SolanaProvider.d.ts +35 -0
  13. package/dist/types/SolanaProvider.d.ts.map +1 -0
  14. package/dist/types/context.d.ts.map +1 -0
  15. package/dist/types/{react-hooks/src/hooks.d.ts → hooks.d.ts} +1 -1
  16. package/dist/types/hooks.d.ts.map +1 -0
  17. package/dist/types/{react-hooks/src/index.d.ts → index.d.ts} +2 -0
  18. package/dist/types/index.d.ts.map +1 -0
  19. package/dist/types/query.d.ts.map +1 -0
  20. package/dist/types/queryHooks.d.ts.map +1 -0
  21. package/dist/types/querySuspenseContext.d.ts.map +1 -0
  22. package/dist/types/ui.d.ts +52 -0
  23. package/dist/types/ui.d.ts.map +1 -0
  24. package/dist/types/useClientStore.d.ts.map +1 -0
  25. package/dist/types/walletStandardHooks.d.ts.map +1 -0
  26. package/package.json +2 -2
  27. package/dist/types/client/src/client/actions.d.ts +0 -18
  28. package/dist/types/client/src/client/actions.d.ts.map +0 -1
  29. package/dist/types/client/src/client/createClient.d.ts +0 -9
  30. package/dist/types/client/src/client/createClient.d.ts.map +0 -1
  31. package/dist/types/client/src/client/createClientHelpers.d.ts +0 -3
  32. package/dist/types/client/src/client/createClientHelpers.d.ts.map +0 -1
  33. package/dist/types/client/src/client/createClientStore.d.ts +0 -29
  34. package/dist/types/client/src/client/createClientStore.d.ts.map +0 -1
  35. package/dist/types/client/src/client/watchers.d.ts +0 -16
  36. package/dist/types/client/src/client/watchers.d.ts.map +0 -1
  37. package/dist/types/client/src/controllers/solTransferController.d.ts +0 -21
  38. package/dist/types/client/src/controllers/solTransferController.d.ts.map +0 -1
  39. package/dist/types/client/src/controllers/splTransferController.d.ts +0 -24
  40. package/dist/types/client/src/controllers/splTransferController.d.ts.map +0 -1
  41. package/dist/types/client/src/features/sol.d.ts +0 -41
  42. package/dist/types/client/src/features/sol.d.ts.map +0 -1
  43. package/dist/types/client/src/features/spl.d.ts +0 -59
  44. package/dist/types/client/src/features/spl.d.ts.map +0 -1
  45. package/dist/types/client/src/features/transactions.d.ts +0 -79
  46. package/dist/types/client/src/features/transactions.d.ts.map +0 -1
  47. package/dist/types/client/src/index.d.ts +0 -25
  48. package/dist/types/client/src/index.d.ts.map +0 -1
  49. package/dist/types/client/src/logging/logger.d.ts +0 -24
  50. package/dist/types/client/src/logging/logger.d.ts.map +0 -1
  51. package/dist/types/client/src/numeric/amounts.d.ts +0 -30
  52. package/dist/types/client/src/numeric/amounts.d.ts.map +0 -1
  53. package/dist/types/client/src/numeric/lamports.d.ts +0 -46
  54. package/dist/types/client/src/numeric/lamports.d.ts.map +0 -1
  55. package/dist/types/client/src/numeric/math.d.ts +0 -74
  56. package/dist/types/client/src/numeric/math.d.ts.map +0 -1
  57. package/dist/types/client/src/numeric/rational.d.ts +0 -27
  58. package/dist/types/client/src/numeric/rational.d.ts.map +0 -1
  59. package/dist/types/client/src/rpc/createSolanaRpcClient.d.ts +0 -42
  60. package/dist/types/client/src/rpc/createSolanaRpcClient.d.ts.map +0 -1
  61. package/dist/types/client/src/serialization/json.d.ts +0 -31
  62. package/dist/types/client/src/serialization/json.d.ts.map +0 -1
  63. package/dist/types/client/src/signatures/status.d.ts +0 -12
  64. package/dist/types/client/src/signatures/status.d.ts.map +0 -1
  65. package/dist/types/client/src/signers/walletTransactionSigner.d.ts +0 -33
  66. package/dist/types/client/src/signers/walletTransactionSigner.d.ts.map +0 -1
  67. package/dist/types/client/src/state/asyncState.d.ts +0 -12
  68. package/dist/types/client/src/state/asyncState.d.ts.map +0 -1
  69. package/dist/types/client/src/transactions/base64.d.ts +0 -12
  70. package/dist/types/client/src/transactions/base64.d.ts.map +0 -1
  71. package/dist/types/client/src/transactions/prepareTransaction.d.ts +0 -16
  72. package/dist/types/client/src/transactions/prepareTransaction.d.ts.map +0 -1
  73. package/dist/types/client/src/transactions/referenceKeys.d.ts +0 -10
  74. package/dist/types/client/src/transactions/referenceKeys.d.ts.map +0 -1
  75. package/dist/types/client/src/transactions/transactionPoolController.d.ts +0 -53
  76. package/dist/types/client/src/transactions/transactionPoolController.d.ts.map +0 -1
  77. package/dist/types/client/src/types.d.ts +0 -205
  78. package/dist/types/client/src/types.d.ts.map +0 -1
  79. package/dist/types/client/src/utils/addressLike.d.ts +0 -5
  80. package/dist/types/client/src/utils/addressLike.d.ts.map +0 -1
  81. package/dist/types/client/src/utils/stableStringify.d.ts +0 -2
  82. package/dist/types/client/src/utils/stableStringify.d.ts.map +0 -1
  83. package/dist/types/client/src/utils.d.ts +0 -21
  84. package/dist/types/client/src/utils.d.ts.map +0 -1
  85. package/dist/types/client/src/wallet/registry.d.ts +0 -9
  86. package/dist/types/client/src/wallet/registry.d.ts.map +0 -1
  87. package/dist/types/client/src/wallet/standard.d.ts +0 -36
  88. package/dist/types/client/src/wallet/standard.d.ts.map +0 -1
  89. package/dist/types/react-hooks/src/QueryProvider.d.ts.map +0 -1
  90. package/dist/types/react-hooks/src/context.d.ts.map +0 -1
  91. package/dist/types/react-hooks/src/hooks.d.ts.map +0 -1
  92. package/dist/types/react-hooks/src/index.d.ts.map +0 -1
  93. package/dist/types/react-hooks/src/query.d.ts.map +0 -1
  94. package/dist/types/react-hooks/src/queryHooks.d.ts.map +0 -1
  95. package/dist/types/react-hooks/src/querySuspenseContext.d.ts.map +0 -1
  96. package/dist/types/react-hooks/src/useClientStore.d.ts.map +0 -1
  97. package/dist/types/react-hooks/src/walletStandardHooks.d.ts.map +0 -1
  98. /package/dist/types/{react-hooks/src/QueryProvider.d.ts → QueryProvider.d.ts} +0 -0
  99. /package/dist/types/{react-hooks/src/context.d.ts → context.d.ts} +0 -0
  100. /package/dist/types/{react-hooks/src/query.d.ts → query.d.ts} +0 -0
  101. /package/dist/types/{react-hooks/src/queryHooks.d.ts → queryHooks.d.ts} +0 -0
  102. /package/dist/types/{react-hooks/src/querySuspenseContext.d.ts → querySuspenseContext.d.ts} +0 -0
  103. /package/dist/types/{react-hooks/src/useClientStore.d.ts → useClientStore.d.ts} +0 -0
  104. /package/dist/types/{react-hooks/src/walletStandardHooks.d.ts → walletStandardHooks.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { createClient, toAddress, toAddressString, stableStringify, createSolTransferController, createSplTransferController, getWalletStandardConnectors, watchWalletStandardConnectors, createTransactionPoolController, createInitialAsyncState, createAsyncState, normalizeSignature, SIGNATURE_STATUS_TIMEOUT_MS, deriveConfirmationStatus, confirmationMeetsCommitment } from '@solana/client';
2
2
  import { createContext, useMemo, useEffect, useContext, useCallback, useRef, useSyncExternalStore, useState } from 'react';
3
- import { jsx } from 'react/jsx-runtime';
3
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import useSWR, { SWRConfig } from 'swr';
5
5
  import { useStore } from 'zustand';
6
6
  import { getBase64EncodedWireTransaction } from '@solana/kit';
@@ -776,6 +776,191 @@ function SolanaQueryProvider({
776
776
  return /* @__PURE__ */ jsx(QuerySuspenseContext.Provider, { value: suspense, children: /* @__PURE__ */ jsx(SWRConfig, { value, children }) });
777
777
  }
778
778
  __name(SolanaQueryProvider, "SolanaQueryProvider");
779
+ function SolanaProvider({ children, client, config, query, walletPersistence }) {
780
+ const shouldIncludeQueryLayer = query !== false && query?.disabled !== true;
781
+ const queryProps = shouldIncludeQueryLayer && query ? query : {};
782
+ const persistenceConfig = walletPersistence === false ? void 0 : walletPersistence ?? {};
783
+ const content = shouldIncludeQueryLayer ? /* @__PURE__ */ jsx(
784
+ SolanaQueryProvider,
785
+ {
786
+ config: queryProps.config,
787
+ resetOnClusterChange: queryProps.resetOnClusterChange,
788
+ suspense: queryProps.suspense,
789
+ children
790
+ }
791
+ ) : children;
792
+ return /* @__PURE__ */ jsxs(SolanaClientProvider, { client, config, children: [
793
+ persistenceConfig ? /* @__PURE__ */ jsx(WalletPersistence, { ...persistenceConfig }) : null,
794
+ content
795
+ ] });
796
+ }
797
+ __name(SolanaProvider, "SolanaProvider");
798
+ var DEFAULT_STORAGE_KEY = "solana:last-connector";
799
+ function WalletPersistence({ autoConnect = true, storage, storageKey = DEFAULT_STORAGE_KEY }) {
800
+ const wallet = useWallet();
801
+ const connectWallet = useConnectWallet();
802
+ const client = useSolanaClient();
803
+ const storageRef = useRef(storage ?? getDefaultStorage());
804
+ const [hasAttemptedAutoConnect, setHasAttemptedAutoConnect] = useState(false);
805
+ const hasPersistedConnectorRef = useRef(false);
806
+ const clientRef = useRef(null);
807
+ useEffect(() => {
808
+ storageRef.current = storage ?? getDefaultStorage();
809
+ }, [storage]);
810
+ useEffect(() => {
811
+ if (clientRef.current !== client) {
812
+ clientRef.current = client;
813
+ setHasAttemptedAutoConnect(false);
814
+ }
815
+ }, [client]);
816
+ useEffect(() => {
817
+ const activeStorage = storageRef.current;
818
+ if (!activeStorage) return;
819
+ if ("connectorId" in wallet && wallet.connectorId) {
820
+ const connectorId = wallet.connectorId;
821
+ if (connectorId) {
822
+ safelyWrite(() => activeStorage.setItem(storageKey, connectorId));
823
+ hasPersistedConnectorRef.current = true;
824
+ return;
825
+ }
826
+ }
827
+ if (wallet.status === "disconnected" && hasPersistedConnectorRef.current) {
828
+ safelyWrite(() => activeStorage.removeItem(storageKey));
829
+ hasPersistedConnectorRef.current = false;
830
+ }
831
+ }, [storageKey, wallet]);
832
+ useEffect(() => {
833
+ if (!autoConnect || hasAttemptedAutoConnect) {
834
+ return;
835
+ }
836
+ if (wallet.status === "connected" || wallet.status === "connecting") {
837
+ setHasAttemptedAutoConnect(true);
838
+ return;
839
+ }
840
+ const activeStorage = storageRef.current;
841
+ if (!activeStorage) {
842
+ setHasAttemptedAutoConnect(true);
843
+ return;
844
+ }
845
+ let cancelled = false;
846
+ const connectorId = safelyRead(() => activeStorage.getItem(storageKey));
847
+ if (!connectorId) {
848
+ setHasAttemptedAutoConnect(true);
849
+ return;
850
+ }
851
+ const connector = client.connectors.get(connectorId);
852
+ if (!connector) {
853
+ return;
854
+ }
855
+ void (async () => {
856
+ try {
857
+ await connectWallet(connectorId, { autoConnect: true });
858
+ } catch {
859
+ } finally {
860
+ if (!cancelled) {
861
+ setHasAttemptedAutoConnect(true);
862
+ }
863
+ }
864
+ })();
865
+ return () => {
866
+ cancelled = true;
867
+ };
868
+ }, [autoConnect, client, connectWallet, hasAttemptedAutoConnect, storageKey, wallet.status]);
869
+ return null;
870
+ }
871
+ __name(WalletPersistence, "WalletPersistence");
872
+ function safelyRead(reader) {
873
+ try {
874
+ return reader();
875
+ } catch {
876
+ return null;
877
+ }
878
+ }
879
+ __name(safelyRead, "safelyRead");
880
+ function safelyWrite(writer) {
881
+ try {
882
+ writer();
883
+ } catch {
884
+ }
885
+ }
886
+ __name(safelyWrite, "safelyWrite");
887
+ function getDefaultStorage() {
888
+ if (typeof globalThis !== "object" || globalThis === null) {
889
+ return null;
890
+ }
891
+ const candidate = globalThis.localStorage;
892
+ if (!candidate) {
893
+ return null;
894
+ }
895
+ return candidate;
896
+ }
897
+ __name(getDefaultStorage, "getDefaultStorage");
898
+ function useWalletConnection(options = {}) {
899
+ const wallet = useWallet();
900
+ const connectWallet = useConnectWallet();
901
+ const disconnectWallet = useDisconnectWallet();
902
+ const discovered = useWalletStandardConnectors(options.discoveryOptions);
903
+ const connectors = options.connectors ?? discovered;
904
+ const connect = useCallback(
905
+ (connectorId, connectOptions) => connectWallet(connectorId, connectOptions),
906
+ [connectWallet]
907
+ );
908
+ const disconnect = useCallback(() => disconnectWallet(), [disconnectWallet]);
909
+ const state = useMemo(() => {
910
+ const connectorId = "connectorId" in wallet ? wallet.connectorId : void 0;
911
+ const session = wallet.status === "connected" ? wallet.session : void 0;
912
+ const error = wallet.status === "error" ? wallet.error ?? null : null;
913
+ return {
914
+ connect,
915
+ connected: wallet.status === "connected",
916
+ connecting: wallet.status === "connecting",
917
+ connectors,
918
+ connectorId,
919
+ disconnect,
920
+ error,
921
+ status: wallet.status,
922
+ wallet: session
923
+ };
924
+ }, [connect, connectors, disconnect, wallet]);
925
+ return state;
926
+ }
927
+ __name(useWalletConnection, "useWalletConnection");
928
+ function WalletConnectionManager({ children, connectors, discoveryOptions }) {
929
+ const state = useWalletConnection({ connectors, discoveryOptions });
930
+ return /* @__PURE__ */ jsx(Fragment, { children: children(state) });
931
+ }
932
+ __name(WalletConnectionManager, "WalletConnectionManager");
933
+ function useWalletModalState(options = {}) {
934
+ const connection = useWalletConnection(options);
935
+ const [isOpen, setIsOpen] = useState(options.initialOpen ?? false);
936
+ const [selectedConnector, setSelectedConnector] = useState(null);
937
+ const closeOnConnect = options.closeOnConnect ?? true;
938
+ const open = useCallback(() => setIsOpen(true), []);
939
+ const close = useCallback(() => setIsOpen(false), []);
940
+ const toggle = useCallback(() => setIsOpen((value) => !value), []);
941
+ const select = useCallback((connectorId) => setSelectedConnector(connectorId), []);
942
+ const connect = useCallback(
943
+ async (connectorId, connectOptions) => {
944
+ await connection.connect(connectorId, connectOptions);
945
+ setSelectedConnector(connectorId);
946
+ if (closeOnConnect) {
947
+ setIsOpen(false);
948
+ }
949
+ },
950
+ [closeOnConnect, connection]
951
+ );
952
+ return {
953
+ ...connection,
954
+ close,
955
+ connect,
956
+ isOpen,
957
+ open,
958
+ selectedConnector,
959
+ select,
960
+ toggle
961
+ };
962
+ }
963
+ __name(useWalletModalState, "useWalletModalState");
779
964
  function useSignAndSendTransaction(uiWalletAccount, chain) {
780
965
  const signAndSendTransactions = useSignAndSendTransactions(uiWalletAccount, chain);
781
966
  return useCallback(
@@ -1104,6 +1289,6 @@ function useWalletAccountTransactionSendingSigner(uiWalletAccount, chain) {
1104
1289
  }
1105
1290
  __name(useWalletAccountTransactionSendingSigner, "useWalletAccountTransactionSendingSigner");
1106
1291
 
1107
- export { SolanaClientProvider, SolanaQueryProvider, useAccount, useBalance, useClientStore, useClusterState, useClusterStatus, useConnectWallet, useDisconnectWallet, useLatestBlockhash, useProgramAccounts, useSendTransaction, useSignAndSendTransaction, useSignIn, useSignMessage, useSignTransaction, useSignatureStatus, useSimulateTransaction, useSolTransfer, useSolanaClient, useSplToken, useTransactionPool, useWaitForSignature, useWallet, useWalletAccountMessageSigner, useWalletAccountTransactionSendingSigner, useWalletAccountTransactionSigner, useWalletActions, useWalletSession, useWalletStandardConnectors };
1292
+ export { SolanaClientProvider, SolanaProvider, SolanaQueryProvider, WalletConnectionManager, useAccount, useBalance, useClientStore, useClusterState, useClusterStatus, useConnectWallet, useDisconnectWallet, useLatestBlockhash, useProgramAccounts, useSendTransaction, useSignAndSendTransaction, useSignIn, useSignMessage, useSignTransaction, useSignatureStatus, useSimulateTransaction, useSolTransfer, useSolanaClient, useSplToken, useTransactionPool, useWaitForSignature, useWallet, useWalletAccountMessageSigner, useWalletAccountTransactionSendingSigner, useWalletAccountTransactionSigner, useWalletActions, useWalletConnection, useWalletModalState, useWalletSession, useWalletStandardConnectors };
1108
1293
  //# sourceMappingURL=index.native.mjs.map
1109
1294
  //# sourceMappingURL=index.native.mjs.map