UNPKG

@roochnetwork/rooch-sdk-kit

Version:
241 lines (225 loc) 7.85 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/hooks/wallet/useAutoConnectWallet.ts var useAutoConnectWallet_exports = {}; __export(useAutoConnectWallet_exports, { useAutoConnectWallet: () => useAutoConnectWallet }); module.exports = __toCommonJS(useAutoConnectWallet_exports); var import_react_query2 = require("@tanstack/react-query"); var import_react6 = require("react"); // src/hooks/wallet/useWalletStore.ts var import_react5 = require("react"); var import_zustand2 = require("zustand"); // src/provider/roochProvider.tsx var import_react3 = require("react"); // src/hooks/useSessionsStore.ts var import_react = require("react"); var import_zustand = require("zustand"); function useSessionStore(selector) { const store = (0, import_react.useContext)(RoochContext); if (!store) { throw new Error( "Could not find RoochSessionContext. Ensure that you have set up the RoochClientProvider." ); } return (0, import_zustand.useStore)(store, selector); } // src/provider/globalProvider.tsx var import_react2 = require("react"); var import_jsx_runtime = require("react/jsx-runtime"); var GlobalContext = (0, import_react2.createContext)(null); var useTriggerError = () => { const ctx = (0, import_react2.useContext)(GlobalContext); if (!ctx) { throw new Error("useTriggerError must be used within a GlobalProvider"); } return ctx.triggerError; }; // src/provider/roochProvider.tsx var import_jsx_runtime2 = require("react/jsx-runtime"); var RoochContext = (0, import_react3.createContext)(null); // src/provider/walletProvider.tsx var import_react4 = require("react"); var import_rooch_sdk = require("@roochnetwork/rooch-sdk"); // src/constants/walletMutationKeys.ts function formMutationKeyFn(baseEntity) { return function mutationKeyFn(additionalKeys = []) { return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys]; }; } var walletMutationKeys = { all: { baseScope: "wallet" }, connectWallet: formMutationKeyFn("connect-wallet"), autoConnectWallet: formMutationKeyFn("auto-connect-wallet"), switchAccount: formMutationKeyFn("switch-account"), createSessionKey: formMutationKeyFn("create-session-key") }; // src/hooks/useSessions.ts function useSessions() { return useSessionStore( (state) => state.sessions.sort((a, b) => b.getCreateTime() - a.getCreateTime()) ); } // src/hooks/wallet/useCurrentWallet.ts function useCurrentWallet() { const currentWallet = useWalletStore((state) => state.currentWallet); const connectionStatus = useWalletStore((state) => state.connectionStatus); switch (connectionStatus) { case "connecting": return { status: connectionStatus, wallet: currentWallet, isDisconnected: false, isConnecting: true, isConnected: false }; case "disconnected": return { status: connectionStatus, wallet: currentWallet, isDisconnected: true, isConnecting: false, isConnected: false }; case "connected": { return { status: connectionStatus, wallet: currentWallet, isDisconnected: false, isConnecting: false, isConnected: true }; } } } // src/provider/walletProvider.tsx var import_jsx_runtime3 = require("react/jsx-runtime"); var WalletContext = (0, import_react4.createContext)(null); // src/hooks/wallet/useWalletStore.ts function useWalletStore(selector) { const store = (0, import_react5.useContext)(WalletContext); if (!store) { throw new Error("Could not find WalletContext. Ensure that you have set up the WalletProvider."); } return (0, import_zustand2.useStore)(store, selector); } // src/hooks/wallet/useConnectWallet.ts var import_react_query = require("@tanstack/react-query"); function useConnectWallet({ mutationKey, ...mutationOptions } = {}) { const sessions = useSessions(); const setCurrentSession = useSessionStore((state) => state.setCurrentSession); const setWalletConnected = useWalletStore((state) => state.setWalletConnected); const setWalletDisconnected = useWalletStore((state) => state.setWalletDisconnected); const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus); const triggerError = useTriggerError(); return (0, import_react_query.useMutation)({ mutationKey: walletMutationKeys.connectWallet(mutationKey), mutationFn: async ({ wallet }) => { try { setConnectionStatus("connecting"); const connectAddress = await wallet.connect(); const selectedAddress = connectAddress[0]; setWalletConnected(wallet, connectAddress, selectedAddress); const cur = sessions.find( (item) => item.getRoochAddress().toStr() === selectedAddress?.genRoochAddress().toStr() ); setCurrentSession(cur); return connectAddress; } catch (error) { setWalletDisconnected(); if ("code" in error && "message" in error) { triggerError(error); } throw error; } }, ...mutationOptions }); } // src/hooks/wallet/useWallets.ts function useWallets() { return useWalletStore((state) => state.wallets); } // src/hooks/wallet/useAutoConnectWallet.ts function useAutoConnectWallet() { const { mutateAsync: connectWallet } = useConnectWallet(); const autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled); const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName); const lastConnectedAddress = useWalletStore((state) => state.lastConnectedAddress); const { isConnected } = useCurrentWallet(); const wallets = useWallets(); const [clientOnly, setClientOnly] = (0, import_react6.useState)(false); (0, import_react6.useLayoutEffect)(() => { setClientOnly(true); }, []); const { data, isError } = (0, import_react_query2.useQuery)({ queryKey: [ "@rooch/sdk-kit", "autoconnect", { isConnected, autoConnectEnabled, lastConnectedWalletName, lastConnectedAddress } ], queryFn: async () => { if (!autoConnectEnabled) { return "disabled"; } if (!lastConnectedWalletName || !lastConnectedAddress || isConnected) { return "attempted"; } let wallet = wallets.find((wallet2) => wallet2.getName() === lastConnectedWalletName); if (wallet) { await connectWallet({ wallet }); } return "attempted"; }, enabled: autoConnectEnabled, persister: void 0, gcTime: 0, staleTime: 0, networkMode: "always", retry: (_) => { return false; }, retryOnMount: false, refetchInterval: 1e3, refetchIntervalInBackground: false, refetchOnMount: false, refetchOnReconnect: false, refetchOnWindowFocus: false }); if (!autoConnectEnabled) { return "disabled"; } if (!clientOnly) { return "idle"; } if (!lastConnectedWalletName) { return "attempted"; } return isError ? "attempted" : data ?? "idle"; } //# sourceMappingURL=useAutoConnectWallet.js.map